Re: ERRest example of non-model method with parameters
Re: ERRest example of non-model method with parameters
- Subject: Re: ERRest example of non-model method with parameters
- From: Pascal Robert <email@hidden>
- Date: Thu, 29 Nov 2012 11:45:34 -0500
Le 2012-11-29 à 11:42, Roger Perryman <email@hidden> a écrit :
>
> On Nov 29, 2012, at 11:26 AM, Pascal Robert wrote:
>
>>
>> Le 2012-11-29 à 11:08, Roger Perryman <email@hidden> a écrit :
>>
>>>
>>> On Nov 28, 2012, at 6:34 PM, Pascal Robert wrote:
>>>
>>>>
>>>> Le 2012-11-28 à 17:11, Roger Perryman <email@hidden> a écrit :
>>>>
>>>>> Thanks Michael. I've looked at it but I'll take a closer look at those classes. I assume I need to focus on @PathParam. While we're on the topic, what is the preferred way to code REST? Should I be using Annotations? Or does it depend on what the controller is doing?
>>>>
>>>> I never used the annotations. The only time I would use them is if I have to register like 100 controllers, just to not have to do it in Application.
>>>
>>> If you are not using the @PathParam annotation, then how do you specify the parameters for the method?
>>
>> By parameters, you mean something like ?key=value ? Like Mike said, call stringFormValueForKey
>
> Yes. But I was also confusing myself between the parameters in the URL (key=value) and the method signature in the action methods since some of the examples seemed to suggest that methods received parameters instead of fetching them use routeObjectForKey.
>
>> http://slideshare.net/wocommunity/er-rest-thebasics
>
> Broken Link
http://www.slideshare.net/wocommunity/er-rest-thebasics-13551691
>> Slides 25 and 26
>>
>> or
>>
>> http://slideshare.net/wocommunity/er-rest-designinggoodapi
>>
>> Slides 15 and 16
>>
>>> I assume you would use routeObjectForKey to access them. Does this mean there is no formal method signature? This would be similar to accessing parameters from a DirectAction call.
>>>
>>>>>
>>>>> Roger
>>>>>
>>>>> On Nov 28, 2012, at 3:19 PM, Michael Hast wrote:
>>>>>
>>>>>> Hi Roger:
>>>>>>
>>>>>> Take a look at the ERRestRouteExample application from Wonder. It helped me understand how all that Rest stuff works in Wonder. It has some nice inline comments. I would take a look at Application.java, CarController.java and CompanyController.java. Both the CarController and CompanyController have a showAction that uses a parameter.
>>>>>>
>>>>>> Michael
>>>>>>
>>>>>> On 11/28/2012 9:46 AM, Roger Perryman wrote:
>>>>>>>
>>>>>>> On Nov 28, 2012, at 11:07 AM, Pascal Robert wrote:
>>>>>>>
>>>>>>>>
>>>>>>>> Le 2012-11-28 à 10:40, Roger Perryman <email@hidden
>>>>>>>> <mailto:email@hidden>> a écrit :
>>>>>>>>
>>>>>>>>> Hi All!
>>>>>>>>>
>>>>>>>>> I am still getting my feet wet with ERRest. Does anyone have an
>>>>>>>>> example of a REST call to a custom method on an EO that is not a
>>>>>>>>> model property and that takes parameters? All of the examples that I
>>>>>>>>> have found use model properties and just "automagically" work. The
>>>>>>>>> framework extracts the parameters and updates modeled properties. The
>>>>>>>>> only example of a non-model property was derivedCurrentTime but it
>>>>>>>>> doesn't use any parameters.
>>>>>>>>
>>>>>>>> If the custom method is part of the EO class, you just need to add a
>>>>>>>> ERXKey and add it to the keys for the response or request.
>>>>>>>
>>>>>>> If I understand you, you are saying to add these to my custom EO class:
>>>>>>> publicstaticfinalString LIST_PRACTICES_KEY= "listPractices";
>>>>>>> public static final ERXKey<com.xeotech.resttest.datamodel.Practice>
>>>>>>> LIST_PRACTICES = new
>>>>>>> ERXKey<com.xeotech.resttest.datamodel.Practice>(LIST_PRACTICES_KEY);
>>>>>>>
>>>>>>> I still don't see how to retrieve the parameters to pass to this method.
>>>>>>> Also, based on a comment below, I assumed this method would live in the
>>>>>>> controller, not the EO.
>>>>>>>
>>>>>>>>> For example, given an address (or latitude / longitude coordinates)
>>>>>>>>> and a distance, find all Practices within the specified distance from
>>>>>>>>> the address. I'm unclear on how to extract the parameters and use
>>>>>>>>> them in a custom method.
>>>>>>>>>
>>>>>>>>> Another example: I need to fetch all Practices that a Physician is
>>>>>>>>> associated with. I can get the list of Practices and I can get the
>>>>>>>>> list of Physicians. What is not clear is how to retrieve the
>>>>>>>>> Practices for the Physician. There is a relationship defined between
>>>>>>>>> Physicians and Practices. I'm sure it will end up requiring me to
>>>>>>>>> tweak my route setup.
>>>>>>>>>
>>>>>>>>> This is from the ERRestRouteExample.
>>>>>>>>>
>>>>>>>>> routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME,
>>>>>>>>> "/Person/{person:Person}", ERXRoute.Method.Get,
>>>>>>>>> PersonController.class, "show"));
>>>>>>>>>
>>>>>>>>> Would I change it to
>>>>>>>>>
>>>>>>>>> routeRequestHandler.addRoute(new ERXRoute(Physician.ENTITY_NAME,
>>>>>>>>> "/Physician/{physician:Physician}/{practices:Practice}",
>>>>>>>>> ERXRoute.Method.Get, PhysicianController.class, "show"));
>>>>>>>>>
>>>>>>>>> It doesn't seem to work. Also, is "show" the proper choice? This is
>>>>>>>>> being sent to a client as data for a list and not displayed directly.
>>>>>>>>
>>>>>>>> "show" is ok, as long as you have a "show" or "showAction" in
>>>>>>>> PhysicianController. But for naming purposes, if you want to get a
>>>>>>>> list of practices for a physician, I would call the method
>>>>>>>> "listPractices".
>>>>>>>
>>>>>>> So in the example above, practices is the name of a method inside my
>>>>>>> controller, not a relationship or attribute defined in the model? I
>>>>>>> can't find it now, but I seem to recall reading somewhere that if the
>>>>>>> framework cannot find a method, it check other places. Would the method
>>>>>>> without the final argument be more appropriate? And since I don't need
>>>>>>> to specify the Practice, how do I specify no parameters?
>>>>>>>
>>>>>>> routeRequestHandler.addRoute(new ERXRoute(Physician.ENTITY_NAME,
>>>>>>> "/Physician/{physician:Physician}/{listPractices:null}",
>>>>>>> ERXRoute.Method.Get, PhysicianController.class));
>>>>>>>
>>>>>>>>> Is it OK to use addDefaultRoutes and also define additional routes?
>>>>>>>>> Or do I need to manually add all the routes if I need to customize any?
>>>>>>>>
>>>>>>>> Yes it is ok.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>>> Webobjects-dev mailing list (email@hidden)
>>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>>
>>>>>>> This email sent to email@hidden
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> Tel: (602) 279-4600 ext: 635
>>>>>> Desert Sky Software: www.desertsky.com
>>>>>> Specializing in the Development and Hosting of
>>>>>> e-Business Applications.
>>>>>> _______________________________________________
>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>> Webobjects-dev mailing list (email@hidden)
>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>
>>>>>> This email sent to email@hidden
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Do not post admin requests to the list. They will be ignored.
>>>>> Webobjects-dev mailing list (email@hidden)
>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>
>>>>> This email sent to email@hidden
>>>>
>>>>
>>>
>>>
>>> _______________________________________________
>>> Do not post admin requests to the list. They will be ignored.
>>> Webobjects-dev mailing list (email@hidden)
>>> Help/Unsubscribe/Update your Subscription:
>>>
>>> This email sent to email@hidden
>>
>>
>
>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list (email@hidden)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden