在基于 JSON 的 REST API 上,PUT 最常见的预期行为是什么?文档替换或部分更新)?
What's the most common expected behavior for a PUT on a JSON based REST API? A document replacement or a partial update)?
我知道有一个完整的 HTTP 方法的 RFC,但我想知道 预期的行为 来自 PUT 到以 Content-type: application/json
响应并接受 JSON 编码主体的 REST API。
- 是否期望将文档完全替换为传入正文的新 JSON 对象?
- 是否希望只修改JSON正文中传递的属性? (作为
PATCH
方法 RFC 5789 的推荐行为)。
- 如果 API 公开的文档不符合模式并且正文中的 JSON 对象具有当前文档中不存在的新属性怎么办?。它应该添加它们吗?
欢迎任何评论或资源供我阅读。
在实践中,只要您在整个应用程序中坚持使用这些方法中的任何一种都可以,从而保持一致性。如果我想根据ID更新一条记录的所有属性,我个人喜欢使用PUT。通过这种方式,我可以为需要指定和更新某些属性的端点保存 PATCH 方法,例如典型的更改密码请求,我只需要更新特定属性。
1) 和 2) PUT 表示替换。将其用于部分替换是不正确的。这就是 PATCH 的用途。
3) 这取决于您的应用程序逻辑。
我知道有一个完整的 HTTP 方法的 RFC,但我想知道 预期的行为 来自 PUT 到以 Content-type: application/json
响应并接受 JSON 编码主体的 REST API。
- 是否期望将文档完全替换为传入正文的新 JSON 对象?
- 是否希望只修改JSON正文中传递的属性? (作为
PATCH
方法 RFC 5789 的推荐行为)。 - 如果 API 公开的文档不符合模式并且正文中的 JSON 对象具有当前文档中不存在的新属性怎么办?。它应该添加它们吗?
欢迎任何评论或资源供我阅读。
在实践中,只要您在整个应用程序中坚持使用这些方法中的任何一种都可以,从而保持一致性。如果我想根据ID更新一条记录的所有属性,我个人喜欢使用PUT。通过这种方式,我可以为需要指定和更新某些属性的端点保存 PATCH 方法,例如典型的更改密码请求,我只需要更新特定属性。
1) 和 2) PUT 表示替换。将其用于部分替换是不正确的。这就是 PATCH 的用途。
3) 这取决于您的应用程序逻辑。