【问题标题】:REST API: Nested resource whose POST side effects create new (different) resourcesREST API:其 POST 副作用创建新(不同)资源的嵌套资源
【发布时间】:2020-05-21 16:03:14
【问题描述】:

我是 REST 新手,并试图了解以下方法是否是公认的 RESTful 实践。

作为一个有代表性的例子,假设在我的域中,我有一条由多个 Legs 组成的 Route。可以将新位置添加到路线中,从而在路线中创建额外的航段。另一种创建额外支线的方法是选择驱动程序。 (域将根据驱动程序支持的腿创建腿)。所以:

我可以使用以下资源查看路线、路线及其支线:

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

所以在 POST 之后:

/route/{route_id}/locations

用户会浏览到:

GET /route/{route_id}/legs

看看新的腿。

这是解决上述情况的可行方法吗?

另一种选择是:

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

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

【问题讨论】:

    标签: api restful-url rest


    【解决方案1】:

    我相信我可能对我自己的问题有一个答案,即上述方法是正确的。在阅读了一些书籍之后:“RESTful Web Services”和“RESTful Web Services Cookbook”(均来自 O'Reilly),我发现了他们所说的“工厂”资源。

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

    来自 Leonard Richardson 的 RESTful Web Services;山姆鲁比

    因此,从本质上讲,地点是一种创造腿的工厂资源。

    如果有人不同意我的阅读,有兴趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多