Ruby http delete request with entity body

fbsender · 2015年04月09日 · 最后由 nightire 回复于 2015年04月09日 · 5262 次阅读

Http Delete Request

最近在对接某 API,自称 RESTful... 遇到了这样的一个 delete 方法,定义如下:

其他的方法(除了 delete 相关)都是采用 POST 方式

不去吐槽接口的设计了,用起来还是挺方便的。有一个问题,http delete 请求是否可以携带 body?

查了一些资料,这个帖子讲得比较全面:http://stackoverflow.com/questions/299628/is-an-entity-body-allowed-for-an-http-delete-request

大体上说,没有明确禁止,即 http delete request 可以携带 body,但是一些 web server 可能会把 delete request 中的 body 给丢弃掉...

从接口设计角度讲,不该带着。

Net::HTTP post 与 delete 方法调用示例

#http post
http = Net::HTTP.new(host, port)
response = http.post(uri, http_body, http_header)
#http delete with body
http = Net::HTTP.new(host, port)
req = Net::HTTP::Delete.new(uri.path, http_header)
req.body = http_body
response = http.request req
#http delete without body
http = Net::HTTP.new(host,port)
http.delete(uri, http_header)

是,任何 HTTP 方法都可以携带 body,比如 GET 也可以。但是这和常规有悖,而且如你所说一些框架会丢弃或无视非 POST 请求中携带的 entity body,因此设计 API 时应避免。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号