使用POST在Rest中删除/更新?

时间:2017-09-12 04:18:13

标签: java rest web-services http

我理解(来自已接受的回答What is the difference between HTTP and REST?) REST只是一组关于如何使用HTTP的规则

接受的回答说

  

不,REST是应该使用HTTP的方式。

     

今天我们只使用了一小部分HTTP协议的方法 - 即   GET和POST。 REST的方法是使用所有协议   方法

     

例如,REST规定使用DELETE擦除文档(be   它是URI后面的文件,状态等),而使用HTTP,你会   滥用GET或POST查询,例如... product /?delete_id = 22

我的问题是什么缺点/缺点(技术或设计)如果我继续使用POST方法而不是DELETE / PUT来删除/更新Rest中的资源?

4 个答案:

答案 0 :(得分:7)

  

我的问题是缺点/缺点是什么(技术或设计)   如果我继续使用POST方法而不是DELETE / PUT   删除/更新Rest中的资源?

POST请求不是Idempotent,而DELETE请求是Idempotent

幂等HTTP方法是一种可以多次调用而没有不同结果的HTTP方法

Idempotency在构建fault-tolerant API时非常重要。

假设客户想要通过POST更新资源。由于POST不是幂等方法,因此多次调用可能会导致错误更新。如果您向服务器发送POST请求会发生什么,但是会超时。资源是否实际更新?在向服务器发送请求或向客户端发送响应期间是否发生了超时?我们可以再次安全地重试,或者我们是否需要首先弄清楚资源发生了什么?通过使用幂等方法,我们不必回答这个问题,但我们可以安全地重新发送请求,直到我们实际从服务器获得响应为止。

因此,如果您使用POST进行删除,则会产生后果。

答案 1 :(得分:0)

在REST中我们通常知道POST用来添加一些东西,PUT用于编辑现有数据中的某些东西,DELETE用于删除一些东西和POST请求是not Idempotent但DELETE请求是Idempotent。 虽然上面是定义,但在我的观点中我们正在使用这些方法,因为对于better understanding,特定方法用于什么目的,并且通过使用这些方法,UI developerBackend developer之间的桥梁将没有被最小化。

  

如果你想使用POST方法而不是DELETE / PUT那么就会有   没有任何影响,但这不是一个好的编码标准。

答案 2 :(得分:0)

从纯粹的技术角度来看,我并不知道有任何真正的缺点。其他人提到了幂等性,但这不仅仅是使用DELETE,你仍然必须实现它。

这给我们留下了设计考虑因素:

  • 您的客户(或者更确切地说,程序员针对您的API进行编程)可能会合理地期望删除事物的DELETE方法和添加内容的POST方法。如果你不遵守这个惯例,你就会混淆它们。
  • 如果您使用POST删除和添加内容,则必须创建另一种方法来告诉实际操作。当然这不是很难,但它使你的API更加复杂,没有充分的理由。
  • 由于这两个原因,您需要更多更好的文档,因为您没有遵循已经记录的RESTful原则。

答案 3 :(得分:0)

当我们在其余API中使用 POST 而不是 Delete 时,我们将从客户端抢夺 Idempotency 的功能。这意味着,通过使用POST我们对API用户说,该API在多次击中时会产生不同的结果。

  

如果发生超时,API用户必须查询资源   他曾要求删除。然后,如果找到,他必须   调用POST API将其删除。

     

如果使用Delete方法发出相同的请求,那么我们可以保证   我们的API用户,对同一方法的多次调用将返回相同的结果   结果。因此,他可以提出任意数量的请求,直到获得   成功删除,而不是超时而没有询问。

注意:API厂商有责任维护幂等性。仅使用Delete方法不会赋予幂等性。