[英]REST API upsert endpoint vs create and update endpoints
我正在编写一个REST API,其余的用于创建/更新/删除用户。
编写创建/更新用户端点的最佳实践是什么?
这里有很多错误的假设。 使用REST,端点表示“事物”而不是“动作”。
可以说这个东西是用户。 您可以在uri下托管用户,例如:
http://example.org/users/roy
从这里开始,所有动作都变得自然。 要删除用户吗?
DELETE /users/roy
要更新吗?
PUT /users/roy
要检索吗?
GET /users/roy
请注意,通常认为PUT比PATCH更RESTful。 如果您严格要求使用REST,则最好实施PUT。 我认为PUT与PATCH的区别和好处有点疑问。
现在您还有其他操作...如何创建新用户? 好吧,我将最佳实践总结如下:
如果可以允许客户端确定URI,则可能应该使用PUT。
PUT /users/roy - Should respond with a 201.
如果要确保确实创建一个新用户而不覆盖旧用户,则可以让客户端使用If-None-Match: *
标头强制服务器拒绝请求(如果资源已经存在)。
我会说以上是最佳实践,但这不是最常见的做法。 通常,REST服务由一些关系数据库支持,并且在URI中经常使用整数代替自然键。
这意味着您的网址格式如下所示
/users/1234
这也意味着客户端在创建新资源时不知道URI是什么。 通常的解决方法是不使用PUT
创建,而是使用某种收集资源并使用POST
创建新用户:
POST /users/
一个好的API可能会返回一个Location
头,该头具有uri到新创建的资源。 一个好的客户将知道,只要它在非安全方法之后收到Location
标头,就应该清除该uri的缓存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.