Rest(表述性状态转移)
本文的主要内容有:
1.了解Rest
2.了解RESTful WebService
3.使用SpringMvc实现RESTful
------------------------------我是华丽的分割线,下面是正文--------------------------------------------------
1,REST是什么
a,出身:由Roy Thomas Fielding博士于2000年提出
b,全称:Representational state Transfer,称为表象化状态转变,或者表述性状态转移
c,REST是Web服务的一种架构风格
d,使用HTTP、URI等广泛流行的标准和协议
e,轻量级、跨平台、跨语言的架构设计
那么,从上面5点总结来看,REST到底是个什么鬼呢?好了,下面要注意了,重点来了:REST是一种设计风格,它既不是一种标准,也不是一种软件,而是一种思想。它通常使用HTTP、URI和XML、json以及HTML这些现有的流行的协议和标准
2,我们来介绍RESTful是什么?
a,RESTful对应中文是REST式的
b,RESTful WebService 是一种常见的REST的应用,是遵守REST风格以及Web风格的Web服务
c,REST式的Web服务是一种ROA((Resource-Oriented Architecture,面向资源架构)
2.1REST架构的主要原则
a,网络上的所有资源都可以被抽象为资源(Resource)
b,每个资源都有一个唯一的资源标识符(Resource identifier)
c,同一资源具有多种表现形式,例如xml,json
d,对资源的各种操作不会改变资源的标识符
e,所有的操作都是无状态的(stateless)[无状态:HTTP是无状态协议。无状态是指协议对于事务处理没有记忆能力,如果后续需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大]
f,符合REST原则的架构方式均可被称为RESTful
2.2REST对资源的操作
-GET:表示获取一个资源
-POST:表示创建一个新的资源
-PUT:表示修改一个资源的状态
-DELETE:表示删除一个资源
资源展现:-XML -JSON
在这里我们回忆一下之前是怎么操作的呢:
http://example.com/users/query/1 GET 表示根据用户id查询用户数据
http://example.com/users/save POST表示新增用户
http://example.com/users/update POST修改用户用户信息
http://example.com/users/delete GET/POST 表示删除用户
请看RESTful的操作
http://example.com/users/1 GET表示根据用户id查询用户信息
http://example.com/users POST表示新增用户信息
http://example.com/users PUT 表示修改用户信息
http://example.com/users DELETE表示删除用户信息
注意:在RESTful请求的路径上,没有资源操作的动词,资源操作的描述
2.3REST接口定义

2.4REST接口设计
首先介绍URL的组成
-网路协议,这里包含http、https
-服务器地址
-接口名称
-?参数列表
其次URL定义限定
-不要使用大写字母
-使用中线-代替下划线——
-参数列表应该被encode过
2.5响应设计
ContentBody仅仅用来传输数据
数据要做到拿来就用的原则,不需要“拆箱”的过程
用来描述数据或者请求的元数据放Header,例如x-Result-Fields
响应示例

2.6指定响应的属性字段
无状态服务器应该允许客户端对数据按需提取,在请求头使用x-result-fields指定数据返回的字段集合
例如:trade有trade_id,trade_name,created_at三个属性,客户端只需其中的trade_id,trade_name两个属性
Request Header
X-Result-Fields:trade_id,trade_name
2.7http常用的响应状态码
200 操作成功
201 对象创建成功
204 操作成功,但是没有响应体
404 资源不存在
500 后台代码错误,服务器内部错误

3.SpringMVC实现RESTful服务
SpringMVC原生态的支持REST风格的架构的设计
所涉及到注解:
………
3.1查询资源

3.2新增资源

3.3 更新资源

默认情况下,PUT请求是无法提交表单数据的,需要在web.xml中添加过滤器解决:
<!-- 解决PUT请求无法提交表单数据的问题 -->
<filter>
<filter-name>HttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.4删除资源

需要在web.xml中添加过滤器解决DELETE请求无法提交表单数据的问题:
注意:表单提交的时候,仍然是Post 请求,但是需要多一个请求参数 _method=DELETE
<!--
将POST请求转化为DELETE或者是PUT
要用_method指定真正的请求参数
-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Rest(表述性状态转移)的更多相关文章
- REST(Representational State Transfer表述性状态转移)
参考内容:http://www.csdn.net/article/2013-06-13/2815744-RESTful-API 定义了一组体系架构原则,您可以根据这些原则设计以系统资源为中心的 Web ...
- “REST”——Representational State Transfer(表述性状态转移)
Representational State Transfer http://www.infoq.com/cn/articles/understanding-restful-style/#anch10 ...
- 【分布式协调器】Paxos的工程实现-Cocklebur状态转移
集群中的主机经过选举过程由Looking状态变为了Leadering或Following状态.而这些状态之间转移的条件是什么呢?先来个直观的,上状态图. 图 4.1 Cocklebur选举过程中的状态 ...
- 背包DP 存在异或条件的状态转移问题
题目链接 分析:有大佬说可以用线性基写,可惜我不会,这是用DP写的 题目明确说明可到达的位置只与能值有关,和下标无关,我们就可以排个序,这样每个数可以转移的区间就是它的所有后缀 我们可以用dp[i][ ...
- 读懂TCP状态转移
读懂TCP状态转移过程,对理解网络编程颇有帮助,本文将对TCP状态转移过程进行介绍,但各状态(总共11个)含义不在本文介绍的范围,请参考文末的书目列表. TCP状态转换图(state transiti ...
- 状压dp终极篇(状态转移的思想)
状压dp是将每种状态都压缩成用一个二进制串,然后利用位运算进行操作的dp,而凡是dp都需要进行状态转移 对于简单的dp问题只需要一个二维数组dp[ i ][ j ]就能解决 具体操作为首先把状态压缩为 ...
- ruby 状态转移
0. 引言 昨天遇到一个问题,就是关于对象状态转移的问题,我姑且这样命名吧.简要描述一下就是:对于一个人,他有进食,帮助他人,恋爱等功能,但是这些功能是有先后顺序的,对于刚出生的人,他要先 ...
- 动态规划:HDU1160-FatMouse's Speed(记录动态规划状态转移过程)
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- poj 2778 DNA Sequence 状态及状态转移 AC自动机 矩阵快速幂
题目链接 题意 给定\(m\)个字符串,问长度为\(n\)的字符串中有多少个不包含那\(m\)个字符串. (字符集为\(A,T,C,G\),\(m\leq 10\),长度\(\leq 10\),\(n ...
随机推荐
- 关于__int128
定义 __int128 n,r,g,b,T; __int128 ans; __int128 f[][]; 取最大值函数 __int128 getmax(__int128 a,__int128 b){ ...
- Sunny-ngrok 解决外网访问内网问题
该博文已过时 请参考官网 http://www.ngrok.cc/ 一 .进入 网址 往下拉找到: 下载不同的版本. 二. 平台登陆地址:http://www.ngrok. ...
- JavaMail简单版实验测试
前言: 最近由于实现web商城的自动发送邮件功能的需求,故涉猎的邮箱协议的内部原理.现将简单版的Java Mail实例做个代码展示,并附上其中可能出现的bug贴出,方便感兴趣的读者进行测试! 1.载入 ...
- 【Codeforces717F】Heroes of Making Magic III 线段树 + 找规律
F. Heroes of Making Magic III time limit per test:3 seconds memory limit per test:256 megabytes inpu ...
- 一个ERP项目实施工程师的若干体会
本人在多年的工作中,参与了ERP的研发和实施,对ERP有较深的认识.在这里,根据自已的实施过程中的一些经历,把自已在实践中的一些体会贡献出来和大家共享,由于时间和精力所限,内容难免有不当之处,挂一漏万 ...
- Class PLBuildVersion is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibr
网上找了一大堆,没有解决的办法 ,主要是iOS10的适配问题,info.plist里没有加对. 访问相册,我只加了 <!-- 相册 --> <key>NSPhotoLibrar ...
- krpano
调试: krpano的场景下方,有一个Console面板可以用来输出即时日志. 可以使用 showlog(true); 来设置打开此功能,默认是关闭的. 这样就可以把下面三种日志实时显示出来了: tr ...
- CSS透明代码
透明往往能产生不错的网页视觉效果,先奉上兼容主流浏览器的CSS透明代码: .transparent_class { filter:alpha(opacity=50); -moz-opacity:0.5 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- 小知识点总结HTML、CSS、JavaScript(一)
1.给元素同时设置背景色和背景图的时候,当背景色写在背景图后面,背景色会覆盖背景图未覆盖的位置 如background:url(); background-color:red; 2.当需求一段文字右对 ...