Hi Attila, I'm happy to see you are back in the team again.

We also need to decide if we need separate DslController or if we can use
DslService, with some additions.

Service PlanetService {
    restful
    
    @Planet findById(Long id) restPath="/planet/{id}" restMethod=GET
        delegates to PlanetRepository.findById;

    save(@Planet planet) restPath="/planet" restMethod="POST"
        delegates to PlanetRepository.save;   
}


We can probably come up with good defaults for restPath and restMethod based
on naming conventions, so that it is optional to define them.


Another design decision is if we should have a separate Controller in the
meta model, that is used by the code generation templates. You know we have
a transformation between dsl model and code generation model, so they don't
have to have the same structure.
Maybe a Controller extends Service is nice in the meta model, because then
it is easy to use polymorphism in the xpand templates.

/Patrik



Bak Attila wrote:
> 
> Hi Patrik,
> 
> How would you image this one in the dsl as annotated?
> I mean how should it look in the textual language?
> The problem ist that operations and params need "annotations" there.
> Could you give me an example?
> 
> @RequestMapping(value = "/inquiry/{id}", method = RequestMethod.GET)
>     public String show(@PathVariable("id") Long id, ModelMap modelMap)
> throws InquiryNotFoundException
> 
> Thanks 
> attila
> 
> 
> Patrik Nordwall wrote:
>> 
>> Hi all, I have an idea of a new feature and would like to have your
>> input.
>> 
>> When we have evaluated Google App Engine we have used the new REST
>> features in Spring 3.0. REST is a perfect style for the cloud and I think
>> it would be rather easy to generate the Spring Controllers, delegating to
>> Services. I'm not looking for another gui solution. It should primarily
>> support json and xml content, which can be used by various client
>> applications (not only cloud environment).
>> 
>> My suggestion is to generate Spring Controllers with @RequestMapping
>> annotations. The methods should delegate to Service methods, or be
>> implemented by hand written code in gap subclass.
>> 
>> It might look something like this:
>> 
>>     @RequestMapping(value = "/inquiry/{id}", method = RequestMethod.GET)
>>     public String show(@PathVariable("id") Long id, ModelMap modelMap)
>> throws InquiryNotFoundException {
>>         Key inquiryKey =
>> KeyFactory.createKey(Inquiry.class.getSimpleName(), id);
>>         Inquiry inquiry = inquiryService.findById(serviceContext(),
>> inquiryKey);
>>         modelMap.put("inquiry", inquiry);
>>         return "inquiry/show";
>>     }
>> 
>>     @RequestMapping(value = "/inquiry", method = RequestMethod.POST)
>>     public String create(@ModelAttribute("inquiry") Inquiry inquiry,
>> BindingResult result) {
>>         if (inquiry == null) {
>>             throw new IllegalArgumentException("A inquiry is required");
>>         }
>>         Inquiry savedInquiry = inquiryService.save(serviceContext(),
>> inquiry);
>>         return "redirect:/rest/inquiry/" + savedInquiry.getId().getId();
>>     }
>> 
>> 
>> What I think should be done:
>> - In meta model add Controller and ControllerOperation, similar to
>> Service. ControllerOperation should include things necessary to define
>> RequestMapping and delegation to ServiceOperation.
>> - In DSL add DslController similar to DslService
>> - In transformation add transformaton from DslController to Controller
>> - In transformation add scaffold for controller, similar to Service, i.e.
>> the CRUD operations can be automated using single scaffold keyword
>> - Generation template for Controller and its operations. Support for gap
>> class.
>> -  Generation template for spring configuration for
>> ContentNegotiatingViewResolver
>> 
>> References:
>> - http://www.infoq.com/articles/designing-restful-http-apps-roth
>> - http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc
>> -
>> http://stsmedia.net/spring-finance-part-7-adding-support-for-json-and-xml-views/
>>   http://code.google.com/p/spring-finance-manager/source/checkout
>>   I have tried the setup described here and I think it is working.
>> - http://curl.haxx.se/ (useful for testing)
>> 
>> What do you thing? Would this be useful for you?
>> 
>> /Patrik
>> 
>> 
>> 
> 
> 

-- 
View this message in context: 
http://old.nabble.com/-sculptor--RESTful-Services-tp25407858s17564p29489342.html
Sent from the Fornax-Platform mailing list archive at Nabble.com.


------------------------------------------------------------------------------
This SF.net email is sponsored by 

Make an app they can't live without
Enter the BlackBerry Developer Challenge
http://p.sf.net/sfu/RIM-dev2dev 
_______________________________________________
Fornax-developer mailing list
Fornax-developer@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/fornax-developer

Reply via email to