PUT的id与URI的身份不同

时间:2016-08-04 13:40:23

标签: rest put

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

URI:

PUT /members/123

身体

{
    id : 456,
    name : "john"
}

1 个答案:

答案 0 :(得分:2)

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

  

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

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

也就是说,标识符和表示形式之间没有特殊原因需要共同拥有任何数据。想想hashmap / dictionary / key-value store。将状态id:456存储在密钥/members/123下面没有任何问题。如果这在您的资源模型中是合适的,那么将新表示放入商店并返回200。