RestActionBean question

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

RestActionBean question

VANKEISBELCK Remi
Hi,

I want to create a REST API with the following endpoints :

GET /api/store/{store}
GET /api/store/{store}/product/{product}

Problem is that those URLs clash, and I get an exception :/

Can Stripes support such an URL scheme ?

Cheers

Rémi

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
_______________________________________________
Stripes-development mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/stripes-development
Reply | Threaded
Open this post in threaded view
|

Re: RestActionBean question

Rick Grashel
Hi Remi,

I use this kind of a scheme by mapping API urls into the StripesDispatcher and then using @UrlBinding on API-based ActionBeans.  So the web.xml would look like:

<servlet-mapping>
    <servlet-name>StripesDispatcher</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

Then, I would have two different action beans.  The class declarations for those would look like this:

@UrlBinding( "/api/major" )
public class MajorActionBean implements ActionBean

@UrlBinding( "/api/major/{someNumber}" )
public class MajorMinorActionBean implements ActionBean

Now, if I call "http://myapp/api/major", then "MajorActionBean" will be executed.  If I call "http://myapp/api/major/1", then "MajorMinorActionBean" will be executed and the "someNumber" parameter will be bound to it.

So Stripes does the correct thing in terms of using a "best-match" approach when it comes resolving UrlBindings to ActionBeans.  It actually does a pretty good job.  If you keep your API clean and simple, Stripes can resolve RESTful bindings extremely well, but if you are not consistent in how you design clean URLs, it will not work.  In those situations, you will need to write you own resolver.

Hope that helps,

-- Rick



On Fri, Mar 11, 2016 at 12:44 PM, VANKEISBELCK Remi <[hidden email]> wrote:
Hi,

I want to create a REST API with the following endpoints :

GET /api/store/{store}
GET /api/store/{store}/product/{product}

Problem is that those URLs clash, and I get an exception :/

Can Stripes support such an URL scheme ?

Cheers

Rémi

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
_______________________________________________
Stripes-development mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/stripes-development



------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
_______________________________________________
Stripes-development mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/stripes-development
Reply | Threaded
Open this post in threaded view
|

Re: RestActionBean question

VANKEISBELCK Remi
Hi Rick,

Strange, I have two actions bound at :

/api/foo/{p}
/api/foo/{p}/bar/{q}

And I have a conflict.

I have DMF, maybe that's the reason for the problem ? I will try with a mapped DispatcherServlet.

Thanks

Rémi

2016-03-11 20:21 GMT+01:00 Rick Grashel <[hidden email]>:
Hi Remi,

I use this kind of a scheme by mapping API urls into the StripesDispatcher and then using @UrlBinding on API-based ActionBeans.  So the web.xml would look like:

<servlet-mapping>
    <servlet-name>StripesDispatcher</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

Then, I would have two different action beans.  The class declarations for those would look like this:

@UrlBinding( "/api/major" )
public class MajorActionBean implements ActionBean

@UrlBinding( "/api/major/{someNumber}" )
public class MajorMinorActionBean implements ActionBean

Now, if I call "http://myapp/api/major", then "MajorActionBean" will be executed.  If I call "http://myapp/api/major/1", then "MajorMinorActionBean" will be executed and the "someNumber" parameter will be bound to it.

So Stripes does the correct thing in terms of using a "best-match" approach when it comes resolving UrlBindings to ActionBeans.  It actually does a pretty good job.  If you keep your API clean and simple, Stripes can resolve RESTful bindings extremely well, but if you are not consistent in how you design clean URLs, it will not work.  In those situations, you will need to write you own resolver.

Hope that helps,

-- Rick



On Fri, Mar 11, 2016 at 12:44 PM, VANKEISBELCK Remi <[hidden email]> wrote:
Hi,

I want to create a REST API with the following endpoints :

GET /api/store/{store}
GET /api/store/{store}/product/{product}

Problem is that those URLs clash, and I get an exception :/

Can Stripes support such an URL scheme ?

Cheers

Rémi

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
_______________________________________________
Stripes-development mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/stripes-development




------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
_______________________________________________
Stripes-development mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/stripes-development
Reply | Threaded
Open this post in threaded view
|

Re: RestActionBean question

Rick Grashel

Hi Remi,

I've never used the DMF, so I can't speak to its behavior. But considering the large amount of assumptions it makes, I would not be surprised if it did not work as you expect.

But I can report that the use cases you are talking about will work 100% if they are mapped directly into the StripesDispatcher.

-- Rick

On Mar 11, 2016 2:44 PM, "VANKEISBELCK Remi" <[hidden email]> wrote:
Hi Rick,

Strange, I have two actions bound at :

/api/foo/{p}
/api/foo/{p}/bar/{q}

And I have a conflict.

I have DMF, maybe that's the reason for the problem ? I will try with a mapped DispatcherServlet.

Thanks

Rémi

2016-03-11 20:21 GMT+01:00 Rick Grashel <[hidden email]>:
Hi Remi,

I use this kind of a scheme by mapping API urls into the StripesDispatcher and then using @UrlBinding on API-based ActionBeans.  So the web.xml would look like:

<servlet-mapping>
    <servlet-name>StripesDispatcher</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

Then, I would have two different action beans.  The class declarations for those would look like this:

@UrlBinding( "/api/major" )
public class MajorActionBean implements ActionBean

@UrlBinding( "/api/major/{someNumber}" )
public class MajorMinorActionBean implements ActionBean

Now, if I call "http://myapp/api/major", then "MajorActionBean" will be executed.  If I call "http://myapp/api/major/1", then "MajorMinorActionBean" will be executed and the "someNumber" parameter will be bound to it.

So Stripes does the correct thing in terms of using a "best-match" approach when it comes resolving UrlBindings to ActionBeans.  It actually does a pretty good job.  If you keep your API clean and simple, Stripes can resolve RESTful bindings extremely well, but if you are not consistent in how you design clean URLs, it will not work.  In those situations, you will need to write you own resolver.

Hope that helps,

-- Rick



On Fri, Mar 11, 2016 at 12:44 PM, VANKEISBELCK Remi <[hidden email]> wrote:
Hi,

I want to create a REST API with the following endpoints :

GET /api/store/{store}
GET /api/store/{store}/product/{product}

Problem is that those URLs clash, and I get an exception :/

Can Stripes support such an URL scheme ?

Cheers

Rémi

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
_______________________________________________
Stripes-development mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/stripes-development




------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
_______________________________________________
Stripes-development mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/stripes-development