REST sub/child 资源单个实体

REST sub/child resource a single entity

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

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

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

到目前为止很容易。

给一本书添加作者怎么样?至少为此示例删除了每本书只有一位作者

/books/id/author POST

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

这让我

/books/id/author PUT

意思是更新那本书的作者资源。更有意义。但是第一次没有作者怎么办?不是真正的更新而是初始创建?也许只是考虑它是更新一个零作者。

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

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

But what about the first time when no author exist? Not really an update but the initial create?

使用 PUT /books/id/author 最初创建作者对我来说很好。正如您可以使用 PUT /books/client-supplied-id 创建一本带有客户端提供的 ID 的书,您可以创建一本由已知路径段 author.

标识的书的作者

既然你写的是作者只会作为一本书的一个组成部分存在,那么这个URL方案就可以了。