Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否在Rest中使用POST进行删除/更新?_Java_Rest_Web Services_Http - Fatal编程技术网

Java 是否在Rest中使用POST进行删除/更新?

Java 是否在Rest中使用POST进行删除/更新?,java,rest,web-services,http,Java,Rest,Web Services,Http,我理解(从接受的答案) 剩下的只是一组关于如何使用HTTP的规则 公认的答案是 不,REST是HTTP应该使用的方式 今天,我们只使用HTTP协议的一小部分方法,即 获取并发布。剩下的方法是使用协议的所有 方法 例如,REST指示使用DELETE删除文档(be) 它是URI后面的一个文件、状态等),而使用HTTP,您可以 误用GET或POST查询,如…product/?delete\u id=22 我的问题是,如果我继续使用POST方法而不是DELETE/PUT来删除/更新Rest中的资源,那么

我理解(从接受的答案) 剩下的只是一组关于如何使用HTTP的规则

公认的答案是

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

今天,我们只使用HTTP协议的一小部分方法,即 获取并发布。剩下的方法是使用协议的所有 方法

例如,REST指示使用DELETE删除文档(be) 它是URI后面的一个文件、状态等),而使用HTTP,您可以 误用GET或POST查询,如…product/?delete\u id=22


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

在Rest中,我们通常知道
POST
用于添加内容,
PUT
用于编辑现有数据中的内容,
DELETE
用于删除内容,POST请求是
非幂等
,但删除请求是
幂等
。 虽然以上是定义,但在我看来,我们使用这些方法是因为为了更好地理解特定方法的用途,并且通过使用这些方法,
UI开发人员
后端开发人员
之间的桥梁不会被最小化

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

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

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

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

幂等性
在构建
容错
API时非常重要

假设客户机希望通过
POST
更新资源。由于POST不是幂等方法,多次调用它可能会导致错误的更新。如果将POST请求发送到服务器,但得到超时,会发生什么情况。资源实际更新了吗?超时是在向服务器发送请求时发生的,还是在向客户端发送响应时发生的?我们是否可以安全地重试,或者我们是否需要首先了解资源发生了什么?通过使用幂等方法,我们不必回答这个问题,但是我们可以安全地重新发送请求,直到我们从服务器得到响应为止


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

从纯技术的角度来看,我没有意识到任何真正的缺点。其他人提到了幂等性,但这不仅仅是通过使用DELETE实现的,您仍然需要实现它

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

  • 您的客户机(或者更确切地说是针对您的API编程的程序员)可能合理地期望DELETE方法删除内容,POST方法添加内容。如果你不遵守这个惯例,你就会把他们搞糊涂
  • 如果你使用POST来删除和添加东西,你必须发明另一种方式来告诉你实际要做什么。这当然不是很难,但它会让API变得更加复杂,这并没有什么好的理由
  • 出于这两个原因,您将需要更多更好的文档,因为您没有遵循RESTful原则,这些原则已经被文档化了

当我们在rest API中使用POST而不是Delete时,我们就从客户端夺取了幂等性的力量。这意味着,通过使用POST,我们告诉API用户,这个API可以在多次命中时产生不同的结果

如果超时,API用户必须查询资源 他请求删除的。如果找到了,他必须 调用POST API将其删除

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


注意:维护幂等性是API制作者的职责。只使用Delete方法不会给出幂等性。

加1表示幂等性