REST API。嵌套资源,其POST副作用会创建新的(不同)资源。

问题描述 投票:1回答:1

我是REST的新手,我想了解以下方法是否是一种公认的RESTful实践。

作为一个有代表性的例子,想象一下,在我的领域中,我有一个由许多Legs组成的Route。新的位置可以被添加到路由中,从而在路由中创建额外的Leg。另一种创建额外腿的方法是选择司机。域将根据驱动支持的驱动来创建Legs)。所以,我可以查看一条路线,并在路线中选择一个驱动程序。

我可以通过以下资源查看一条路线和一条路线以及它的腿。

GET /route/{route_id}
GET /route/{route_id}/legs

当为路线添加支腿时,我想显示一个地点列表,用户可以从中选择。所以我实现了一个地点资源。地点大多是静态的,并且是由一个单独的系统提供的。

GET /route/{route_id}/locations

所以我想采取的方法是。

POST /route/{route_id}/locations

当这个资源也被发布时(连同JOSN中的到达时间等信息),它会在域中引起一个副作用,即在路线中创建新的腿。

对于司机来说,这将是类似的事情。

GET /route/{route_id}/drivers
POST /route/{route_id}/drivers

所以在POSTing到:

/route/{route_id}/locations

用户会浏览到..:

GET /route/{route_id}/legs

然后就会看到新的路径

对于上述情况,这是一个可行的方法吗?

另一种方案是。

GET /route/{route_id}/legs/locations
POST /route/{route_id}/legs/locations

虽然从概念上看,这似乎没有什么不同(资源只是相同的--URL的名称对REST来说是多余的)。

api rest restful-url restapi
1个回答
0
投票

我相信我自己的问题可能有了答案,那就是上述方法是正确的。在阅读了一些书籍之后。"RESTful Web Services" 和 "RESTful Web Services Cookbook" (这两本都是O'Reilly出版的) 我看到了他们所说的 "工厂 "资源。

"POST请求是试图从一个现有的资源创建一个新的资源。现有资源可能是数据结构意义上的新资源的父节点,就像一棵树的根节点是它所有叶子节点的父节点一样。或者现有资源可能是一个特殊的 "工厂 "资源,它的唯一目的是生成其他资源。 与POST请求一起发送的表示方式描述了新资源的初始状态。"

摘自Leonard Richardson;Sam Ruby的《RESTful Web Services》。

所以本质上位置是一个工厂资源,创造腿。

如果有人不同意我的解读,我很感兴趣。

© www.soinside.com 2019 - 2024. All rights reserved.