[整理]通过http1.1 GET, POST, PUT, PATCH, DELETE, HEAD, TRACE理解真正的RESTFUL

转载 2016年05月30日 11:50:03


RESTful, 说说 http 的 patch method

2013-12-13 — Yanbin
最早的时候,我们只需要 GET 和 POST 方法,POST 方法的引入也只是为了消除 URL 过长,参数隐藏,上传文件的问题,完全和语义无关。接触到 RESTful 之后,我们开始思考 GET 和 POST 的不同语义,并且十分必要的去发掘出所有的 HTTP method,HTTP/1.1 所实现的 method,见 RFC 2616, 有这些:

OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT

规范是这么定义的,这还要看容器实现了多少,比如 Tomcat 7 中的 servlet api 实现了

doOptions, doGet, doHead, doPost, doPut, doDelete, doTrace 就差个 doConnect 了。

而我们这里要说的 PATCH method 是在 Servlet 3.0 和当前 Tomcat 7 中都提到的,也就是尚未实现它。

这也难怪,PATCH 在 2010 年三月份才成为正式的方法,见 RFC 5789。没有 PATCH 的时候我们进行更新的操作采用的是 PUT 方法。那么 PATCH 和 PUT 有什么区别呢?

同样可以从语义上去理解,有两方面的对比:

1. 对已有资源的操作:

PATCH 用于资源的部分内容的更新,例如更新某一个字段。具体比如说只更新用户信息的电话号码字段

而 PUT 用于更新某个资源较完整的内容,比如说用户要重填完整表单更新所有信息,后台处理更新时可能只是保留内部记录 ID 不变。

2. 当资源不存在时:

联想到版本控制 PATCH 是修改原来的内容,也可能会产生一个新的版本。比如当资源不存在的时候,PATCH 可能会去创建一个新的资源,这个意义上像是 saveOrUpdate 操作。

本文原始链接 http://unmi.cc/restful-http-patch-method/, 来自 隔叶黄莺 Unmi Blog
PUT 只对已有资源进行更新操作,所以是 update 操作

见 When should we use the PATCH HTTP method? in The RESTful CookBook

The HTTP methods PATCH can be used to update partial resources. For instance, when you only need to update one field of the resource, PUTting a complete resource representation might be cumbersome and utilizes more bandwidth
PATCH /user/jthijssen HTTP/1.1

<user>
    <firstname>Joshua</firstname>
</user>

Also, the PUT method is idempotent. PUTting the same data multiple times to the same resource, should not result in different resources, while POSTing to the same resource can result creation of multiple resources.

在 RFC 5789 更详述了 PATCH 与 PUT 的区别。

再来看下目前谁实现了 PATCH 方法,谁还没有实现 PATCH 方法

未实现 - 目前 JDK7 的 HttpURLConnection
未实现 - TOMCAT 7
未实现 - PlayFramework 2 也不支持
Apache HttpComponents HttpClient version 4.2 or later 支持了 PATCH
Spring 3.2 开始支持 PATCH 方法,但要选对部署的容器
JBoss Netty 支持 PATCH,可见: http://docs.jboss.org/netty/3.2/api/org/jboss/netty/handler/codec/http/class-use/HttpMethod.html

总之现在实现了 PATCH 方法的容器真是少。

参考:1. List of HTTP methods (verbs)
2. Method Definitions
3. RFC 5789 - PATCH Method for HTTP
4. RFC 2616
5. Standard Methods- RESTful API Design

本文链接 http://unmi.cc/restful-http-patch-method/, 来自 隔叶黄莺 Unmi Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 2.5 通用 (CC BY-NC-SA 2.5) 进行许可。


微信浏览器如何不使用缓存

微信浏览器是在webview的上层做的缓存:就是如果请求过了这个地址,就会存在本地,之后不取线上了。 那么如何不适用缓存呢? 在调试阶段或者频繁更新的页面加入以下头信息:...
  • kepoon
  • kepoon
  • 2016年12月13日 09:45
  • 1345

jQuery 事件委托

事件委托是通过事件冒泡的原理,利用父级去触发子级的事件。 如下html,如果不用事件委托,将每一个li都去添加click事件监听,非常麻烦。 另外就是如果通过js动态创建的子节点,需要重新绑定事件...

HTTP请求,包括OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT介绍

HTTP请求类型HTTP协议定义了很多类请求,包括OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT,具体介绍如下: OPTIONS:返回服务器针对特定资源所...

http协议中:GET/POST/PUT/DELETE/INPUT/TRACE/OPTIONS/HEAD方法

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式: OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web...

HTTP Request GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE Methods

An HTTP request is a class consisting of HTTP style requests, request lines, request methods, reques...

http请求方法(GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT)

根据HTTP标准,HTTP请求可以使用多种请求方法。 HTTP的1.0版本中只有三种请求方法: GET, POST 和 HEAD方法。到了1.1版本时,新增加了五种请求方法:OPTIONS, PUT...

RESTful Request:GET/PUT/DELETE/POST/HEAD/OPTIONS【转】

在RESTful的Web世界里,我们真正可以操作的Request类型其实很少,HTTP仅提供了寥寥无几的几种Request,其中绝大多数Web操作都是由以下四种Request来完成的: HT...

jax-rs(Java API for RESTful Web Services)实践教程 之二 —— get/post/put/delete/head

转载请注明出处,谢谢 http://blog.csdn.net/exsuns 新建一个web工程: 新建类com.Hello.java ,内容如下 view plainc...

浅析HTTP协议六种请求方法(get,head,put,delete,post)

浅析HTTP协议六种请求方法(get,head,put,delete,post)标准Http协议支持六种请求方法,即:1、GET 2、POST 3、PUT 4、Delete 5、HEAD 6、Opti...

解析HTTP协议六种请求方法:get,head,put,delete,post有什么区别

标准Http协议支持六种请求方法,即: 1、GET 2、POST 3、PUT 4、Delete 5、HEAD 6、Options 但其实我们大部分情况下只用到了GET和POST。如果想设...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[整理]通过http1.1 GET, POST, PUT, PATCH, DELETE, HEAD, TRACE理解真正的RESTFUL
举报原因:
原因补充:

(最多只允许输入30个字)