REST API追加启动端点与创建和更新端点



我正在编写一个REST API,它处理创建/更新/删除用户。

编写创建/更新用户端点的最佳实践是什么?

  1. 一个处理创建和更新(=upstart)用户POST请求的端点
  2. 两个不同的端点-一个处理创建用户POST请求,另一个处理更新用户PATCH请求

这里有很多错误的假设。使用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中通常使用整数而不是自然键。

这意味着你的url模式看起来像

/users/1234

这也意味着客户端在创建新资源时无法知道URI是什么。典型的解决方法是不使用PUT进行创建,而是使用某种集合资源并使用POST创建新用户:

POST /users/

一个好的API可能会返回一个Location头,该头具有新创建的资源的uri。一个好的客户端会知道,每当它在非安全方法之后接收到Location标头时,它都应该清除该uri的缓存。

最新更新