本文的主要内容有:

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对资源的操作

举例 http://example.com/users/

-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风格的架构的设计

所涉及到注解:

-@RequestMapping

-@PathVariable

-@ResponseBody

………

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(表述性状态转移)的更多相关文章

  1. REST(Representational State Transfer表述性状态转移)

    参考内容:http://www.csdn.net/article/2013-06-13/2815744-RESTful-API 定义了一组体系架构原则,您可以根据这些原则设计以系统资源为中心的 Web ...

  2. “REST”——Representational State Transfer(表述性状态转移)

    Representational State Transfer http://www.infoq.com/cn/articles/understanding-restful-style/#anch10 ...

  3. 【分布式协调器】Paxos的工程实现-Cocklebur状态转移

    集群中的主机经过选举过程由Looking状态变为了Leadering或Following状态.而这些状态之间转移的条件是什么呢?先来个直观的,上状态图. 图 4.1 Cocklebur选举过程中的状态 ...

  4. 背包DP 存在异或条件的状态转移问题

    题目链接 分析:有大佬说可以用线性基写,可惜我不会,这是用DP写的 题目明确说明可到达的位置只与能值有关,和下标无关,我们就可以排个序,这样每个数可以转移的区间就是它的所有后缀 我们可以用dp[i][ ...

  5. 读懂TCP状态转移

    读懂TCP状态转移过程,对理解网络编程颇有帮助,本文将对TCP状态转移过程进行介绍,但各状态(总共11个)含义不在本文介绍的范围,请参考文末的书目列表. TCP状态转换图(state transiti ...

  6. 状压dp终极篇(状态转移的思想)

    状压dp是将每种状态都压缩成用一个二进制串,然后利用位运算进行操作的dp,而凡是dp都需要进行状态转移 对于简单的dp问题只需要一个二维数组dp[ i ][ j ]就能解决 具体操作为首先把状态压缩为 ...

  7. ruby 状态转移

    0. 引言       昨天遇到一个问题,就是关于对象状态转移的问题,我姑且这样命名吧.简要描述一下就是:对于一个人,他有进食,帮助他人,恋爱等功能,但是这些功能是有先后顺序的,对于刚出生的人,他要先 ...

  8. 动态规划:HDU1160-FatMouse's Speed(记录动态规划状态转移过程)

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. poj 2778 DNA Sequence 状态及状态转移 AC自动机 矩阵快速幂

    题目链接 题意 给定\(m\)个字符串,问长度为\(n\)的字符串中有多少个不包含那\(m\)个字符串. (字符集为\(A,T,C,G\),\(m\leq 10\),长度\(\leq 10\),\(n ...

随机推荐

  1. 即使用ADO.NET,也要轻量级实体映射,比Dapper和Ormlite均快

    不管出于什么原因,有时候框架人员摒弃了NH或EF,而使用原生数据库访问对象. 为了优美的编程,用上我写的轻量级映射扩展方法吧 目的:将SqlDataReader自动转换成T类型 代码如下: /// & ...

  2. 1122MySQL性能优化之 Nested Loop Join和Block Nested-Loop Join(BNL)

    转自http://blog.itpub.net/22664653/viewspace-1692317/ 一 介绍  相信许多开发/DBA在使用MySQL的过程中,对于MySQL处理多表关联的方式或者说 ...

  3. 黄聪:phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护

    首先到phpexcel官网上下载最新的phpexcel类,下周解压缩一个classes文件夹,里面包含了PHPExcel.php和PHPExcel的文件夹,这个类文件和文件夹是我们需要的,把class ...

  4. 【USACO 2.4 】Bessie Come Home

    题意:给出n条有权的双向边(10000),求到达Z最近的大写字母,及其距离. 题解:即求Z出发的最短路,用dijstra就可以了,注意边要开到20000以上. /* TASK: comehome LA ...

  5. Neural Style学习1——简介

    该项目是Github上面的一个开源项目,其利用卷积神经网络的理论,参照论文A Neural Algorithm of Artistic Style,可以实现一种效果:两张图片,一张取其内容,另一张取其 ...

  6. 数据结构图文解析之:队列详解与C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  7. nginx + mysql + php相关源码包及安装

    nginx + mysql + php安装 引言 完整的搭建一个nginx+php-fpm+mysql的服务器,一直是我向做的,不过一致没有完成过,这次工作需要,终于安装成功了 我列出了我遇到的一些问 ...

  8. 使用Maven Assembly plugin将依赖打包进jar

    一个Eclipse的工程,在pom中配置了若干依赖,需要将pom中所有的依赖全部打包进一个jar包中,可以选择的方案有maven-assembly-plugin和fatjar.以前采用fatjar进行 ...

  9. <<< Tomcat运行报错IOException while loading persisted sessions: java.io.EOFException

    解决方法:将work下面的文件清空,主要是*.ser文件,或者只是删除掉session.ser即可以解决.

  10. 搭建FTP服务器

    yum install vsftpd -yyum install pam* db4* --skip-broken –y 创建并生成vsftpd 数据库文件vi /etc/vsftpd/ftpusers ...