将子资源移动到 REST 中的另一个父资源

kor*_*lvs 5 rest

我有一个 REST 服务。

现在我需要具有将一些子资源从一个父级移动到另一个父级的功能,例如将一本书从一个作者移动到另一个作者。

我的变体是:

POST /api/books/x/moveto/y
Run Code Online (Sandbox Code Playgroud)

但是如何以 RESTful 方式创建这样的架构师呢?

cas*_*lin 4

从 REST 的角度来看,URL 应该用于定位资源而不是表达操作。为了表达操作,应该使用现有的 HTTP 动词。

看起来你的“移动”操作就是要替换这本书的作者。

PUT方法似乎是要走的路:

4.3.4. 放

PUT方法请求创建目标资源的状态或用请求消息有效负载中所包含的表示所定义的状态来替换目标资源的状态。[...]

因此,您可以拥有如下所示的端点:

PUT /api/books/{bookId}/author
Run Code Online (Sandbox Code Playgroud)

请求负载将包含新作者的表示。