Java 是否在Rest中使用POST进行删除/更新?
我理解(从接受的答案) 剩下的只是一组关于如何使用HTTP的规则 公认的答案是 不,REST是HTTP应该使用的方式 今天,我们只使用HTTP协议的一小部分方法,即 获取并发布。剩下的方法是使用协议的所有 方法 例如,REST指示使用DELETE删除文档(be) 它是URI后面的一个文件、状态等),而使用HTTP,您可以 误用GET或POST查询,如…product/?delete\u id=22Java 是否在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中的资源,那么
我的问题是,如果我继续使用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原则,这些原则已经被文档化了
注意:维护幂等性是API制作者的职责。只使用Delete方法不会给出幂等性。加1表示幂等性