我应该使用POST或PUT进行可以创建或更新的API调用

时间:2016-09-30 11:35:14

标签: rest laravel restful-url

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

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

3 个答案:

答案 0 :(得分:3)

我不认为创建/更新区别是在PUT和POST之间做出决定的最佳方式。这由rest cook book

备份
  

HTTP方法POST和PUT不是CRUD创建和更新的HTTP等价物。

我建议您阅读该文章,但由于其中一些评论说它们没有得到它,我会尝试以另一种方式解释。

  1. 问问自己,如果在PUT或POST请求之后直接向同一URL发出GET请求会发生什么。如果你收到你刚刚PUT或POST的相同数据,那么它应该是一个PUT请求。如果你必须转到另一个URL来查看数据,那么它应该是一个POST(并且你可以使用响应中的Location头来告诉客户端可以使用GET请求查看POSTed数据的位置)。 / LI>
  2. Idempotency 比创建/更新更重要,或者我是否可以向同一个网址发出GET请求。 PUT请求是幂等的(多次重复相同的请求具有与一次相同的效果)而POST请求不是(多次发出相同的请求与制作一次请求不同)。如果您的请求每次都有其他副作用,那么您必须使用POST。
  3. 听起来你的请求是幂等的,并且你知道资源预先存在的确切URL,所以我认为你应该使用PUT。

    正如Rest烹饪书中所表达的那样,将PUT用于资源创建和更新是完全可以的。

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

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

答案 1 :(得分:0)

使用 PUT api调用。 POST 主要用于创建数据。

答案 2 :(得分:0)

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