RestFul :是一种软件架构风格,设计风格,而不是标准。提供了一组设计原则和约束条件。
简单概述:
REST -- REpresentational State Transfer 直接翻译:表现层状态转移。简单概述一句话:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。
Transfer:通俗来讲就是:资源在网络中以某种表现形式进行状态转移。分解开来。
Resource:资源,即数据(前面说过网络的核心)。比如 newsfeed,friends等。
Representational:某种表现形式,比如用JSON,XML,JPEG等。
State Transfer:状态变化。通过HTTP动词实现。
Restful架构风格的特点,主要有以下几个方面:
资源:
所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。资源总要通过某种载体反应其内容,文本可以用txt格式
表现,也可以用HTML格式、XML格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现;JSON是现在最常用的资源表示格式。
我对资源和数据理解如下:
资源是以json(或其他Representation)为载体的、面向用户的一组数据集,资源对信息的表达倾向于概念模型中的数据:
- 资源总是以某种Representation为载体显示的,即序列化的信息
- 常用的Representation是json(推荐)或者xml(不推荐)等
- Represntation 是REST架构的表现层
- 相对而言,数据(尤其是数据库)是一种更加抽象的、对计算机更高效和友好的数据表现形式,更多的存在于逻辑模型中
统一接口概述:
RESTful架构风格规定,数据的元操作,即CRUD(create, read, update和delete,即数据的增删查改)操作,分别对应于HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更
新资源,DELETE用来删除资源,这样就统一了数据操作的接口,仅通过HTTP方法,就可以完成对数据的所有增删查改工作。
即:
- GET(SELECT):从服务器取出资源(一项或多项)。
- POST(CREATE):在服务器新建一个资源。
- PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
- PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
- DELETE(DELETE):从服务器删除资源。
URI概述:
可以用一个URI(统一资源定位符)指向资源,即每个URI都对应一个特定的资源。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或识别符。
一般的,每个资源至少有一个URI与之对应,最典型的URI即URL。
无状态:
所谓无状态的,即所有的资源,都可以通过URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。有状态和无状态的区别,举个简单的例子说明一下:
如查询员工的工资,如果查询工资是需要登录系统,进入查询工资的页面,执行相关操作后,获取工资的多少,则这种情况是有状态
的,因为查询工资的每一步操作都依赖于前一步操作,只要前置操作不成功,
后续操作就无法执行;
如果输入一个url即可得到指定员工的工资,则这种情况是无状态
的,因为获取工资不依赖于其他资源或状态,且这种情况下,员工工资是一个资源,由一个url与之对应,可以通过HTTP中的GET
方法得到资源,这
是典型的RESTful风格。
ROA、SOA、REST与RPC:
ROA(Resourse Oriented Architecture),restful的架构风格是SOA形式的围绕着资源展开,虽然ROA与SOA并不冲突,甚至把ROA看做SOA的一种也未尝不可,但由于RPC也是SOA,比较久远一点点论文、
博客或图书也常把SOA与RPC混在一起讨论,因此,RESTful 架构风格的服务通常被称之为ROA架构,很少提及SOA架构,以便更加显式的与RPC区分。
RPC风格曾是Web Service的主流,最初是基于XML-RPC协议(一个远程过程调用(remote procedure call,RPC)的分布式计算协议)。
RPC风格的服务,不仅可以用HTTP
,还可以用TCP
或其他通信协议。但RPC风格的服务,受开发服务采用语言的束缚比较大。如.NET框架中,开发web service的传统方式是使用WCF,基于WCF开发的服务即
RPC风格的服务,使用该服务的客户端通常要用C#来实现,如果使用python或其他语言,很难实现可以直接与服务通信客户端;进入移动互联网时代后,RPC风格的服务很难在移动终端使用,而RESTful风格的
服务,由于可以直接以json
或xml
为载体承载数据,以HTTP方法为统一接口完成数据操作,客户端的开发不依赖于服务实现的技术,移动终端也可以轻松使用服务,这也加剧了RESTful取代RPC成为web service
的主导。