什么是REST?以及RESTful的实现之二
原文地址:http://zh.wikipedia.org/wiki/REST
REST[编辑]
维基百科,自由的百科全书
表征状态转移(英文: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/products/12345
下单购买,
POST http://www.store.com/order/
<purchase-order>
<item> ... </item>
</purchase-order>
REST的优点[编辑]
可以利用缓存Cache来提高响应速度
通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
浏览器即可作为客户端,简化软件需求
相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
不需要额外的资源发现机制
在软件技术演进中的长期的兼容性更好
实现[编辑]
Ruby on Rails1.2以后的版本支持REST model。
JBoss RESTEasyJBoss的REST实现
参考资料[编辑]
http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm Roy Fielding的博士论文《Architectural Styles and the Design of Network-based Software Architectures》
http://www.xml.com/pub/a/2002/02/06/rest.html 第二代web服务,Paul Prescod。
^ Richardson, Leonard; Ruby, Sam, RESTful Web Services, O'Reilly. 2007 ((May 8, 2007)), ISBN 0596529260
^ Elkstein, M. What is REST?. Retrieved on 2009-07-04.
转载于:https://blog.51cto.com/tcloud/1337314
什么是REST?以及RESTful的实现之二相关推荐
- JAVA RESTful WebService实战笔记(二)
资源定位之注解相关简介 @QueryParam注解 JAX-RS2定义了@QueryParam注解来定义查询参数,如下表所示 接口描述 资源地址 分页查询列表数据 /query-resource/te ...
- 我所理解的RESTful Web API [设计篇]
<我所理解的RESTful Web API [Web标准篇]>Web服务已经成为了异质系统之间的互联与集成的主要手段,在过去一段不短的时间里,Web服务几乎清一水地采用SOAP来构建.构建 ...
- restful 风格 web api规范
协议:http/https 域名 : http://api.example.com/xxx/xxx api: 标明api接口服务 xxx: 服务 xxx: 资源 版本控制: 一.使用MediaType ...
- RESTful API接口设计规范
目录 一.RESTful的诞生背景 二.什么是RESTful? 三.Restful API接口设计规范 3.1.协议 3.2.路径规则|域名 3.3.版本控制 3.4.请求类型 3.5.传入参数 3. ...
- 一文搞懂RESTFUL风格
文章目录 前言 一.Restful是什么? 二.使用步骤 1.Resultful有哪些类型? 2.编写代码 3. 常见的状态码 前言 提示:这里可以添加本文要记录的大概内容: restful的风格其实 ...
- 一文搞懂RESTFUL风格(Java版)
文章目录 前言 一.Restful是什么? 二.使用步骤 1.Resultful有哪些类型? 2.编写代码 验证结果使用postman 3. 常见的状态码 总结 如果您有Java方面的问题(不局限于此 ...
- RESTful风格的应用
RESTful风格的应用 一.开发第一个RESTful应用 RESTful开发规范 RESTful命名要求 开发第一个RESTful应用 二.RESTful基本使用 RestController注解 ...
- springboot使用RESTful
目录 一.RESTful是什么? 二.如何实现? 最后两点注意 总结 一.RESTful是什么? restful是一种互联网设计的风格,它只是提出了一组客户端和服务器在交互时的架构理念和设计原则,它并 ...
- 【Flask】Flask-RESTful 风格编程
一.RESTful定义 RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义. RESTFUL适用于移动互联网厂商作为业务使能接口的场景. RE ...
最新文章
- 北航与西安交大计算机专业对比,北航和西安交大,谁的工科实力更强,该上哪一所大学呢?...
- 计算机软件与理论考研考试科目,2014年电子科技大学081202计算机软件与理论考研专业目录及考试科目...
- 一部IT电影,《反托拉斯行动》,主角加里-文斯顿(蒂姆·罗宾斯饰)影射比尔·盖茨...
- C# 学习笔记(12)hex文件转bin文件小工具
- c语言5的阶乘流程图_5 种前途迷茫的编程语言
- (王道408考研数据结构)第二章线性表-第三节5:顺序表和链表的比较
- selenium3 + java 日志
- apache的php扩展名解析漏洞
- Host-Only(仅主机模式)
- JMeter压力测试报告分析
- Java高级工程师必备技术栈
- 磁力云播Android代码,磁力云播
- 微博表情 文本与图片对照表
- 彻底卸载sql sever 2005
- 微信小程序怎么做店铺?
- gyp ERR! stack Error: Can't find Python executable python, you can set the PYT HON env variable.
- 并发编程之 ThreadLocal 源码剖析
- SpringBoot项目没有@RunWith注解
- Linux终端-对NTFS文件系统数据丢失后的恢复案例
- Eclipse护眼背景色
热门文章
- Cannot initialize a parameter of type ‘NSArray<id<RCTBridgeModule>> *‘ with an rvalue of type ‘NSArr
- 连接LilyPad之Linux平台的驱动
- 解耦 多态性 java_java多态
- python获取今年第一天_利用python获取某年中每个月的第一天和最后一天
- Oculus软件完全支持三传感器室内跟踪
- 苹果智能车芯片已基本就绪!最新造车进展曝光,股价一夜暴涨4000亿
- Windows 11正式版将于10月5日推出,说好的支持安卓App没上车
- 倒计时两天丨NeurIPS 2020预讲会:7位智源青年科学家,21场报告
- 我关注的编程Up主,竟然是新晋IOI第一人:18岁高中生,玩起《我的世界》来不能打扰...
- 5000量子比特的商用计算平台发布!D-Wave:这是商业应用的唯一选择