REST API upsert端点与创建和更新端点

时间:2017-11-02 02:35:32

标签: node.js rest api

我正在写一个REST API,其余的涉及创建/更新/删除用户。

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

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

1 个答案:

答案 0 :(得分:3)

这里有很多错误的假设。使用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: *标头强制服务器在资源已存在时拒绝该请求。 / p>

我会说上面是最佳做法,但它并不是最常见的做法。通常的休息服务由一些关系数据库支持,而不是自然键,整数通常用在URI中。

这意味着您的网址模式看起来像

/users/1234

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

POST /users/

一个好的API可能会返回一个Location标头,其中包含新创建的资源的uri。一个好的客户端会知道,只要在非安全方法之后收到Location标头,它就应该清除该uri的缓存。