英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。
目前在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAP和XML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的。
-
1 宗旨
-
2 要点及标准
-
2.1 REST的要求
-
2.2 关于状态
-
2.3 RESTful Web 服务
-
3 实现举例
-
4 REST的优点
-
5 实现
-
6 参考资料
|
宗旨
REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表徵。获得这些表徵致使这些应用程序转变了其状态。随着不断获取资源的表徵,客户端应用不断地在转变着其状态,所谓表徵狀態轉移(Representational State Transfer)。
这一观点不是凭空臆造的,而是通过观察当前Web互联网的运作方式而抽象出来的。Roy Fielding 认为,
“ |
设计良好的网络应用表现为一系列的网页,这些网页可以看作的虚拟的状态机,用户选择这些链接导致下一网页传输到用户端展现给使用的人,而这正代表了状态的转变。 |
” |
要点及标准
需要注意的是,REST是设计风格而不是标准。REST通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准。
- 资源是由URI来指定。
- 对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
- 通过操作资源的表现形式来操作资源。
- 资源的表现形式则是XML或者HTML,取决于读者是机器还是人,是消费web服务的客户软件还是web浏览器。当然也可以是任何其他的格式。
REST的要求
- 客户端和服务器结构
- 连接协议具有无状态性
- 能够利用Cache机制增进性能
- 层次化的系统
- 隨需代碼 - Javascript (可選)
关于状态
应该注意区别应用的状态和连接协议的状态。REST对于连接的无状态性实际上要求每次經過无状态的连接协议传送的信息必須包含应用中所有的状态信息。
RESTful Web 服务
RESTful Web 服务(也称为 RESTful Web API)是一个使用HTTP并遵循REST原则的Web服务。它从以下三个方面资源进行定义:
- URI,比如:
http://example.com/resources/
。
- Web服务接受与返回的互联网媒体类型,比如:JSON,XML ,YAML 等。
- Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。
该表列出了在实现RESTful Web 服务时HTTP请求方法的典型用途。
HTTP 请求方法在RESTful Web 服务中的典型应用[1]
资源
GET
PUT
POST
DELETE
一组资源的URI,比如http://example.com/resources/
列出 URI,以及该资源组中每个资源的详细信息(后者可选)。 |
使用给定的一组资源替换当前整组资源。 |
在本组资源中创建/追加一个新的资源。 该操作往往返回新资源的URL。 |
删除 整组资源。 |
单个资源的URI,比如http://example.com/resources/142
获取 指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XML、JSON等) |
替换/创建 指定的资源。并将其追加到相应的资源组中。 |
把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。 |
删除 指定的元素。 |
PUT 和 DELETE 方法是幂等方法。GET方法是安全方法 (不会对服务器端有修改,因此也是幂等的)。
不像基于SOAP的Web服务,RESTful Web服务并没有的“正式”标准[2]。 这是因为REST是一种架构,而SOAP只是一个协议。虽然REST不是一个标准,但在实现RESTful Web服务时可以使用其他各种标准(比如HTTP,URL,XML,PNG等)。
实现举例
例如,一个简单的网络商店应用,
列举所有商品,
GET http://www.store.com/products
具体某一件商品,
GET http://www.store.com/product/12345
下单购买,
POST http://www.store.com/order
<purchase-order>
<item> ... </item>
</purchase-order>
REST的优点
- 可以利用缓存Cache来提高响应速度
- 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
- 浏览器即可作为客户端,简化软件需求
- 相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
- 不需要额外的资源发现机制
- 在软件技术演进中的长期的兼容性更好
来源:http://zh.wikipedia.org/wiki/REST
参考文献:http://www.restfulwebservices.cn/
分享到:
相关推荐
SpringMVC的Restful风格Demo
Restful风格编程面试题
一个Delphi实现的HttpServer,支持RESTful风格路由
商业项目测试webservice源代码,使用restful风格封装,里面包含json数据压包解包传输,加密解密,完全可以拿到项目中使用
主要介绍了vue 调用 RESTful风格接口操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
自己对RESTful风格的理解,和一个简单的demo的截图及配置描述。
用CXF开发RESTful风格WebService.doc
python开发,基于flask-restful 的中小型项目,restful风格API接口开发实例,以mongodb作为数据库 python开发,基于flask-restful 的中小型项目,restful风格API接口开发实例,以mongodb作为数据库python开发,基于...
Http请求Restful风格的远程调用,在远程调用的过程中会出现四种请求方式,这个工具把此部分代码给封装了一下。
httpclient和RestfuL服务风格上传下载文件,可改为JAVA分布式系统进行交互,具体用法和改法详见代码里的注释
基于Spring Boot为主线的技术栈,采用RESTful风格架构的微信点餐系统 基于Spring Boot为主线的技术栈,采用RESTful风格架构的微信点餐系统 基于Spring Boot为主线的技术栈,采用RESTful风格架构的微信点餐系统 基于...
springmvc的rest风格的增删改查,适合springmvc的新手
基于Spring Boot,采用RESTful风格架构的微信点餐系统源码(高分毕设).zip 基于Spring Boot,采用RESTful风格架构的微信点餐系统源码(高分毕设).zip 基于Spring Boot,采用RESTful风格架构的微信点餐系统源码...
RESTful风格的Java后台管理系统开发平台,前后端分离模式,前端采用路由单页面模式
SpringMVC RESTFUL风格的写法,以及与非RESTFUL的区别
这是一个restful风格的webservice框架,使用官方的jersey 整合mybatis和spring,需要用tomcat8才能运行,
内容只为接口开发,配合前端和移动app调用使用,不包含html页面,基于springboot+oauth2.0+jwttoken鉴权(内有怎么使用redistoken和数据库token注释)+restful风格+阿里短信+阿里消息推送+车牌识别等。该项目为工作...
基于python flask框架构建的前后端分离,房屋租赁系统全栈项目,采用RESTful风格,使用bootstrap响应式布局,可用于本科毕业设计,课程设计作业等 使用flask框架RESTful风格快速搭建。 一个互联网租房项目,前端使用...
使用servlet开发的时候,所需要的jar包,千万不要导入we.rs上的jar包,吃了一次亏,闹了好久才搞定