对于可以创建或更新的 API 调用,我应该使用 POST 还是 PUT

Should I use POST or PUT for API call that can create or update

我想知道我是否应该使用 POST 或 PUT 进行我的 API 调用。

后端将在我的数据库中创建或更新现有行。我知道我使用 POST 创建和 PUT 更新,但是当我不知道哪个会被切换时我应该使用什么 create/update ?

使用PUTapi调用。 POST主要在创建数据时使用

如果您不知道使用什么,请使用 POST。如果您不太确定,请参考:http://restcookbook.com/HTTP%20Methods/put-vs-post/

我不认为 create/update 区别是决定 PUT 和 POST 的最佳方式。这是由 rest cook book:

支持的

The HTTP methods POST and PUT aren't the HTTP equivalent of the CRUD's create and update.

我建议你读一下那篇文章,但由于那里的一些评论说他们看不懂,我会尝试用另一种方式解释。

  1. 问问自己,如果在 PUT 或 POST 请求之后直接向同一个 URL 发出 GET 请求,会发生什么情况。如果您返回与您刚刚 PUT 或 POSTed 相同的数据,那么它可能应该是一个 PUT 请求。如果你必须去不同的 URL 查看数据,那么它可能应该是一个 POST (你可以在响应中使用 Location header 来告诉客户端在哪里POSTed 数据可以通过 GET 请求查看。
  2. 幂等性比create/update重要得多,或者实际上我是否可以向同一个URL发出GET请求。 PUT 请求是幂等的(多次重复相同的请求与发出一次相同的效果)而 POST 请求不是(多次发出相同的请求与发出一次不同)。如果您的请求每次都有额外的副作用,那么您必须使用 POST.

听起来你的请求是幂等的,而且你确切地知道 URL 资源将存在于最前面,所以我认为你应该使用 PUT。

如 Rest cook book 文章中所述,使用 PUT 进行资源创建和更新完全没问题。

如果您可以使用 PUT,那么您应该使用 PUT,因为它可以为客户提供有关该服务的更多信息。例如,PUT 请求的容错、弹性和分发要容易得多,因为您不关心同一个请求是否多次发生。构建发出 POST 请求的容错应用程序可能有点棘手,因为您必须确保请求只发生一次。实现 re-try 逻辑也比 PUT 更容易,因为您不关心请求在哪里失败,您可以 re-try 因为幂等性。

为 POST 实现重试有点困难,因为客户端不确定请求是否成功,并且它必须假设发出多个 POST 请求可能会造成破坏。