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

use*_*603 2 java rest web-services http

我理解(从接受的答案HTTP和REST之间有什么区别?)REST只是一组关于如何使用HTTP的规则

接受的答案说

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

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

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

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

Meh*_*lik 7

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

POST请求是没有Idempotent,但DELETE请求Idempotent.

幂等HTTP方法是一种HTTP方法,可以多次调用而不会产生不同的结果

Idempotency在构建fault-tolerantAPI时很重要.

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

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

  • 加上幂等提及1 (3认同)

小智 5

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

这给我们留下了设计方面的考虑:

  • 您的客户(或者更确切地说是针对您的 API 编程的程序员)可能会合理地期望 DELETE 方法删除内容,而 POST 方法添加内容。如果您不遵守该约定,就会混淆它们。
  • 如果您将 POST 用于删除和添加内容,则必须发明另一种方式来告诉您实际要做什么。这当然不是很难,但它无缘无故地使您的 API 变得更加复杂。
  • 由于这两个原因,您将需要更多更好的文档,因为您没有遵循已经记录在案的 RESTful 原则。


San*_*adi -1

在 REST 中,我们通常知道POST用于添加某些内容、PUT用于编辑现有数据中的某些内容以及DELETE用于删除某些内容,而 POST 请求是,not Idempotent但 DELETE 请求是Idempotent。虽然上面是定义,但在我看来,我们使用这些方法是因为better understanding该特定方法的用途是什么,并且通过使用这些方法之间的桥梁UI developer不会Backend developer被最小化。

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