在以下情况下尝试找出正确的宁静行为:
{"id": 1}
GET /objects/1
上,我显然应该接受{"id": 1}
PUT /objects/1 {"id": 2}
会发生什么?这些对我而言具有吸引力的选项是降序排列:
id
。 问题:我的对象可能真的很复杂,并且将id编织到它们的嵌套结构中,使得再次过滤/分解变得困难答案 0 :(得分:3)
对给定表示形式的成功PUT建议,在同一目标资源上进行后续GET将导致在200(OK)响应中发送等效表示形式。
不需要以任何语义上有意义的方式同意资源的标识符及其表示,这与不需要文件的完全限定路径与其内容一致的方式几乎相同。字典中的值不需要与键相同。
GET /objects/1
200 OK
{ "id": 2 }
就HTTP而言,这是完全有效的,就像它用于
GET /fbb477c8-e2f3-4581-9c44-27305de6ebee
200 OK
{ "id": 2 }
您需要依靠的标准的关键部分是:
原始服务器应验证PUT表示是否与服务器对目标资源的任何约束一致,而该约束不能由PUT更改,也不会由PUT更改。
完全可以说,从PUT
到/fbb477c8-e2f3-4581-9c44-27305de6ebee
的任何表示都必须约为id:1
,并且拒绝不一致的请求,这些请求不能满足该不变性。 409 Conflict是这种情况下常用的状态代码。
当然,标识符/objects/1
也是如此。