用不同RequestMethod制作出restful规范的应用

HTTP/1.1请求类型简介

HTTP/1.1所实现的method有以下七种(rfc2616 5.1.1):

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

 

其中OPTIONS 这个方法比较特殊,它用于获取当前URL所支持的方法,如果请求成功,它将会返回一个名为“Allow”的头,值是所支持的方法,如“GET,POST”。

打个比方,如果在servlet中复写了doGet方法,那将返回的头是 Allow: GET, HEAD, TRACE, OPTIONS

 

规范是这么定义的,这还要看容器实现了多少,

比如 Tomcat 7 中的 servlet api 实现了 doOptions, doGet, doHead, doPost, doPut, doDelete, doTrace 就差个 CONNECT了。

spring mvc 中 DispatcherServlet 仅支持 GET, HEAD, POST, PUT, PATCH, DELETE

若要实现OPTIONS和TRACE 的支持,需要在DispatcherServlet 配置中加上dispatchOptionsRequest和dispatchTraceRequest。

 

不同请求类型在restful中的应用

GET:

  CRUD中的READ

  GET请求可以说是最常见的了,它的本质就是发送一个请求取得服务器的某个资源,资源通过HTTP Header和Body(HTML文本、JSON、图片、视频等)组成。

 

HEAD:

  判断资源是否存在

  HEAD和GET本质上是一样的,只不过HEAD方法不会含有Body,仅仅是Header而已,比如下面测试数据,所请求的URL只配置了get请求方式,但是用head也可以请求到资源(200),只不过body大小为0(千万不要用head做请求方式,你永远拿不到数据),通过这个下面例子就得出了HEAD的应用场景,你如果要判断这个资源是否存在就可以用head的方式,一可以节约带宽,二意义也更加明确。

 

POST

  CURD中的CREATE

  向服务器提交数据,对应创建操作,表单提交基本都用这个方式

 

PUT

  CURD中的UPDATE

  PUT和POST类似,都是向服务器发送数据,不过PUT通常指定了资源的存放位置,而POST没有,比如 /blog(POST) 代表新建一个blog,/blog/100(PUT)就代表把blog放到100这个地址 这个操作就更像是修改而不是新建了。

 

PATCH

  CURD中的UPDATE

  PATCH和PUT、POST类似,也是向服务器发送数据,但是PATCH用于部分资源的更新,比如更新一个字段,而PUT就用于更新资源比较完整的内容,除了id字段,其他所有的字段都更新了。

 

DELETE

  CURD中的DELETE

  这个方法语义就很明确了

 

TRACE CONNECT基本不会用到,springmvc默认也不支持

 

参考

HTTP六种请求方法_百度文库

RESTful, 说说 http 的 patch method | 隔叶黄莺 Unmi Blog - 软件编程实践

HttpServlet (Servlet 3.0 API Documentation - Apache Tomcat 7.0.70)

rfc2616

RequestMethod (Spring Framework 4.3.2.RELEASE API)

posted @ 2016-08-26 15:44  Parasis  阅读(365)  评论(0编辑  收藏  举报