PUT 的 URI id 与 body 的 id 不同

Ant*_*tin 3 rest put

如果客户端尝试更新资源时 URI 的 id 与正文的 id 不同,那么响应应该是什么?EG :

URI:

PUT /members/123
Run Code Online (Sandbox Code Playgroud)

身体

{
    id : 456,
    name : "john"
}
Run Code Online (Sandbox Code Playgroud)

Voi*_*son 5

https://tools.ietf.org/html/rfc7231#section-4.3.4

源服务器应该验证 PUT 表示与服务器对目标资源的任何约束一致,这些约束不能或不会被 PUT 更改。当源服务器使用与 URI 相关的内部配置信息来设置 GET 响应上表示元数据的值时,这一点尤其重要。当 PUT 表示与目标资源不一致时,源服务器应该通过转换表示或更改资源配置来使它们保持一致,或者以包含足够信息的适当错误消息响应来解释表示为什么不合适。建议使用 409(冲突)或 415(不支持的媒体类型)状态代码,后者特定于内容类型值的约束。

主体中的 id 应与资源标识符匹配的要求(或等效地,资源标识符不可变的要求)将被视为对资源的约束。因此,如果是这种情况,您应该保持整个资源不变,并返回带有错误消息的 409。

也就是说,标识符和表示不需要有任何共同的数据没有特别的理由。想想 hashmap/dictionary/key-value 存储。将状态存储id:456在 key 下没有任何问题/members/123。如果这适用于您的资源模型,则将新表示放入存储并返回 200。