在发出HTTP DELETE请求时,请求URI应该完全标识要删除的资源。但是,是否允许添加额外的元数据作为请求实体主体的一部分?
当前回答
对Body使用DELETE是有风险的…比起REST,我更喜欢这种列表操作方法:
常规操作
GET /objects/获取所有对象
GET /object/ID获取指定ID的对象
POST /objects添加一个新对象
PUT /object/ID添加指定ID的对象,更新对象
DELETE /object/ID删除指定ID的对象
所有自定义操作都是POST
POST /objects/addList添加body中包含的对象列表或数组
POST /objects/deleteList删除包含在body中的对象列表
POST /objects/customQuery基于body中的自定义查询创建一个List
如果客户不支持您的扩展操作,他们可以以常规方式工作。
其他回答
Roy Fielding在HTTP邮件列表上澄清了HTTP邮件列表https://lists.w3.org/Archives/Public/ietf-http-wg/2020JanMar/0123.html并说:
GET/DELETE主体绝对禁止产生任何影响 对请求的处理或解释
这意味着主体不能修改服务器的行为。 然后他补充道:
除了 为了维护,必须读取和丢弃接收到的字节 信息框架。
最后是不禁止尸体的原因
我们不禁止派人去的唯一原因是 因为这将导致懒惰的实现,假设没有人会这样做 被发送。
因此,当客户端可以发送有效负载主体时,服务器应该丢弃它 和api不应该为这些请求的有效载荷体定义语义。
2014年更新的HTTP 1.1规范(RFC 7231)明确地允许在DELETE请求中使用实体:
DELETE请求消息中的有效负载没有定义的语义;在DELETE请求上发送有效负载主体可能会导致某些现有实现拒绝该请求。
这个没有定义。
DELETE请求消息中的有效负载没有定义的语义; 在DELETE请求上发送有效负载主体可能会导致一些现有的问题 实现来拒绝请求。 https://www.rfc-editor.org/rfc/rfc7231#page-29
也许下面的GitHUb url会帮助你,得到答案。 实际上,应用服务器,如Tomcat, Weblogic拒绝HTTP。带请求有效负载的DELETE调用。所以记住这些东西,我已经在github中添加了例子,请看看
https://github.com/ashish720/spring-examples
有些版本的Tomcat和Jetty似乎会忽略存在的实体体。如果你想要收到它,那就麻烦了。
推荐文章
- 有没有REST api的命名规范指南?
- 什么是HTTP中的“406-不可接受的响应”?
- 最好的轻量级web服务器(只有静态内容)的Windows
- HTTP POST在Java中使用JSON
- 哪些HTTP方法与哪些CRUD方法相匹配?
- 使用HTML形式的PUT方法
- 如何转义哈希字符在URL
- RESTful服务中部分更新的最佳实践
- JAX-RS / Jersey如何自定义错误处理?
- 有没有办法在python中做HTTP PUT
- 我能在服务器端应用程序(PHP、Ruby、Python等)上读取URL的哈希部分吗?
- 如何POST表单数据与Spring RestTemplate?
- 什么是http头“X-XSS-Protection”?
- 在nodejs http中body在哪里。得到回应?
- Restful API服务