[openstack-dev] [api-wg] [api] [cinder] [nova] Support specify action name in request url

Gilles Dubreuil gdubreui at redhat.com
Mon Feb 5 03:28:19 UTC 2018


As you said RESTful is not a standard but brings guidelines of good 
practices. Which in turn doesn't preclude adding ideas, as long as 
respecting RESTful approach. So we get from both sides.

Therefore a good schema structure adds to a de-facto standard, once the 
practice is commonly used.


On 02/02/18 19:11, Duncan Thomas wrote:
> So I guess my question here is why is being RESTful good? Sure it's 
> (very, very loosely) a standard, but what are the actual advantages? 
> Standards come and go, what we want most of all is a good quality, 
> easy to use API.
>
> I'm not saying that going RESTful is wrong, but I don't see much 
> discussion about what the advantages are, only about how close we are 
> to implementing it.
>
> On 1 Feb 2018 10:55 pm, "Ed Leafe" <ed at leafe.com 
> <mailto:ed at leafe.com>> wrote:
>
>     On Jan 18, 2018, at 4:07 AM, TommyLike Hu <tommylikehu at gmail.com
>     <mailto:tommylikehu at gmail.com>> wrote:
>
>     >    Recently We found an issue related to our OpenStack action
>     APIs. We usually expose our OpenStack APIs by registering them to
>     our API Gateway (for instance Kong [1]), but it becomes very
>     difficult when regarding to action APIs. We can not register and
>     control them seperately because them all share the same request
>     url which will be used as the identity in the gateway service, not
>     say rate limiting and other advanced gateway features, take a look
>     at the basic resources in OpenStack
>
>     We discussed your email at today’s API-SIG meeting [0]. This is an
>     area that is always contentious in the RESTful world. Actions,
>     tasks, and state changes are not actual resources, and in a pure
>     REST design they should never be part of the URL. Instead, you
>     should POST to the actual resource, with the desired action in the
>     body. So in your example:
>
>     > URL:/volumes/{volume_id}/action
>     > BODY:{'extend':{}}
>
>     the preferred way of achieving this is:
>
>     URL: POST /volumes/{volume_id}
>     BODY: {‘action’: ‘extend’, ‘params’: {}}
>
>     The handler for the POST action should inspect the body, and call
>     the appropriate method.
>
>     Having said that, we realize that a lot of OpenStack services have
>     adopted the more RPC-like approach that you’ve outlined. So while
>     we strongly recommend a standard RESTful approach, if you have
>     already released an RPC-like API, our advice is:
>
>     a) avoid having every possible verb in the URL. In other words,
>     don’t use:
>       /volumes/{volume_id}/mount
>       /volumes/{volume_id}/umount
>       /volumes/{volume_id}/extend
>     This moves you further into RPC-land, and will make updating your
>     API to a more RESTful design more difficult.
>
>     b) choose a standard term for the item in the URL. In other words,
>     always use ‘action’ or ‘task’ or whatever else you have adopted.
>     Don’t mix terminology. Then pass the action to perform, along with
>     any parameters in the body. This will make it easier to transition
>     to a RESTful design by later updating the handlers to first
>     inspect the BODY instead of relying upon the URL to determine what
>     action to perform.
>
>     You might also want to contact the Kong developers to see if there
>     is a way to work with a RESTful API design.
>
>     -- Ed Leafe
>
>     [0]
>     http://eavesdrop.openstack.org/meetings/api_sig/2018/api_sig.2018-02-01-16.02.log.html#l-28
>     <http://eavesdrop.openstack.org/meetings/api_sig/2018/api_sig.2018-02-01-16.02.log.html#l-28>
>
>
>
>
>     __________________________________________________________________________
>     OpenStack Development Mailing List (not for usage questions)
>     Unsubscribe:
>     OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>     <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>     http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>     <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
>
>
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20180205/daad66fe/attachment.html>


More information about the OpenStack-dev mailing list