解读REST

REST(representational state transfer)翻译为表述性状态转移,源自Roy Thomas Firlding博士在2000年就读加州大学欧文分校期间发表的一篇学术论文.REST之父在该论文中提出了REST的6个特点:客户端-服务器,无状态,可缓存,统一接口,分层系统和按需编码.
REST具有跨平台,跨语言的优势.从其诞生开始,就得到了诸多语言的快速支持,最著名的是ROR(Ruby on rails)框架.新兴语言(node,golang),工具平台(docker,spark)和公有云,更是将REST默认为服务开放形式.
1.一种架构风格
REST是一种架构风格,在这种架构风格中,对象被视为一种资源,通常使用概念清晰的名词命名.
表述性状态是指资源数据在某个瞬时的状态快照,资源可以有多种表述(representation),表述状态具有描述性,包括资源数据的内容,表述格式(XML,JSON,ATOM)等信息.
REST的资源是可寻址的,通过HTTP1.1协议(RFC 2616)定义的通用动词方法(比如GET PUT DELETE POST),使用URI协议(RFC3305)来唯一标识某个资源公布出来的接口.
请求一个资源的过程可以理解为访问一个具有指定性和描述性的URI,通过HTTP协议将资源的表述从服务器”转移”到客户端或者相反方向.
REST不是一种技术,也不是一个标准或者协议,而是一种使用既有标准:HTTP,URI,XML来实现其要求的架构风格.因此,与之对应的不是SOAP协议,而是像RPC这样的架构风格.
2.基本实现形式
HTTP,URI,XML是REST的基本实现形式,但不是唯一的实现形式.REST一开始便使用已有的HTTP协议,URI协议来描述其特征,而对如何使用一种编程语言来实现,并没有任何描述和规定,甚至应该包含哪些传输类型或者数据格式也没有描述,但通常的实现至少包含XML格式.
具体而言,HTTP协议和URI用于统一接口和定位资源,文本,二进制流,XML,JSON等格式用来做为资源的表述.正如采用已有技术XMLHTTPREQUEST+JAVASCRIPT+XML实现AJAX一样,使用HTTP+URI+XML实现REST的好处是让开发者持有这些已知的技术来开发REST的入门门槛较低,关注点更容易放到REST的核心概念和业务逻辑上.
以HTTP+URI+XML实现的应用并不一定是REST服务,但对于AJAX,这个逆命题是成立的,因为AJAX是一种技术,而REST是一种架构风格.学习和使用REST的关键是掌握这种思想,而不是具体的实现形式.