什么是REST?
表象化状态转变(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。
目前在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAP和XML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的。
宗旨
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机制增进性能
层次化的系统
Code On Demand - Javascript
关于状态
应该注意区别应用的状态和连接协议的状态。REST对于连接的无状态性实际上要求每次经过无状态的连接协议传送的信息必须包含应用中所有的状态信息。
实现举例
例如,一个简单的网络商店应用,
列举所有商品,
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的软件依赖性更小
不需要额外的资源发现机制
在软件技术演进中的长期的兼容性更好
目前许多公司提供服务的企业都用到REST模式,比如支付宝的支付接口、DISCUZ NT 3.0的API、淘宝的TOP(Taobao Open Platform)等等
互联网的下一个发展方向,在WEB这一块,我个人认为将是SOA的天下,REST也是SOA中的一种,微软目前的WCF也是SOA中的一种实现方式。
可以想象得出,未来的WEB应用,都会以API的方式去提供服务,不管是给自己本系统的不同模块之间还是与外部应用,都会采用SOA的方式,这肯定是一种趋势。
在目前的应用中,都需要考虑海量数据和大并发,那么所开发的应用都应该要能支持分布式,而SOA则是一个即可以使模块与模块之间独立,也可以使得应用和应用之间的耦合性降低,同时还先天性支持了分布式的实现模式。
这种变革将会像B/S变革C/S一样,一定会在未来的某一天,彻底改变。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MS虚拟化架构部署XenDesktop5系列二
Win 7 Master Image安装 上一节我们创建了Hyper-V、AD、DHCP、SCVMM等准备,这一节我们来创建Master Image和安装Desktop Studio。 1. 我们在Hyper-V中创建了一个Win7的虚拟机作为部署镜像的模板,接着将你需要的应用都安装在这个模板上,并装上Hyper-V 集成服务。在Citrix中这样的镜像模板叫做Master Image。我们要将Master Image 加入域中否则之后批量生成的虚拟桌面默认都只会跟着是工作组模式,那Domain user 是没有权限进去的。 另一个tips是,假如你使用Hyper-V而不是Xen Server, 那创建的虚拟机,推荐使用固定大小磁盘。Hyper-V创建虚拟机默认选择动态增长盘,我在测试中使用的是Server 2008 R2的本地存储,那XenDesktop部署的桌面镜像占用的空间为不是你的实际空间大小,而是你动态增长盘磁盘大小可以到达的最大值,默认是127G,部署2个就已经超过250G了,我第一次安装的时候选了动态增长盘而我硬盘只有160G,当部署2个虚拟桌面时就出现了系统资源不足而...
- 下一篇
Android内核开发:从源码树中删除出厂的app应用
如果我们已经成功获取了手机的root权限,就可以通过下面的方法直接删除掉系统出厂的app应用,假设某app的安装文件叫做xxxx.apk,那么删除它的命令如下所示: $ adb root $ adb remount $ adb shell rm /system/app/xxxx.apk 同样,我们也可以将自己的app安装到系统的/system目录中去: $ adb root $ adb remount $ adb push xxxx.apk /system/app/ 上面的方法只是介绍了通过命令行的方式手动添加/删除系统出厂的app,那么,如何从Android系统源码树中删除指定的出厂的app应用呢? 首先,推荐大家阅读一下这篇文章:《理解 Android Build 系统》,大致了解一下整个Android源码的编译系统架构,本文在这篇文章的基础上,重点关注如何删减系统出厂的app。 Android源码中,在build/target/product目录下预先定义了很多app列表的组合,如下所示: 在开发具体的Android产品时,可以通过“引用”这些系统预定义的mk文件,快速形成某类产...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS关闭SELinux安全模块
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作