【问题标题】:REST sub/child resource a single entityREST 子/子资源单个实体
【发布时间】:2015-01-13 04:19:33
【问题描述】:

我很难思考如何为子资源建模。

以有作者的书籍为例。您可以拥有 N 本书,每本书只有一位作者。

/books GET
/books POST
/books/id PUT
/books/id DELETE 

到目前为止很容易。

给一本书添加作者怎么样。至少在这个例子中删除了每本书只有一个作者

/books/id/author POST

这似乎让我感到困惑,因为 POST 通常意味着创建。在已经设置作者的情况下,api 的用户可能会认为他们只是在创建新作者,而实际上他们正在删除旧作者并用新作者替换它。

这让我有了

/books/id/author PUT

意思是更新那本书的作者资源。有点意思。但是第一次没有作者存在怎么办?不是真正的更新,而是最初的创建?也许只是想它就是更新一个零作者。

这甚至应该是子资源吗?这将是一个复杂的对象,所以有点道理。虽然我猜你不可能有没有作者的书。所以我不应该建模为子资源并说您在创建或修改图书资源时传递了作者对象。

最后的想法。我不认为我会将作者建模为根资源。所以至少在这种情况下,它们只会存在于书籍资源下。同样,每本书只有一位作者。

【问题讨论】:

  • "但是第一次没有作者的时候呢?" --- 它仍然是语义的。 PUT 只是将数据放入资源中,无论它是否存在。

标签: rest http restful-url


【解决方案1】:

但是第一次没有作者的时候呢?不是真正的更新,而是最初的创建?

使用PUT /books/id/author 最初创建作者对我来说看起来不错。由于您可以使用PUT /books/client-supplied-id 创建具有客户端提供的 ID 的书籍,因此您可以创建由已知路径段 author 标识的书籍的作者。

由于您写道作者将仅作为书籍的一部分存在,因此此 URL 方案很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多