作者 | Damon 爱数AnyShare引擎研发部-开发经理
本篇内容是对《RESTful Web Services》书中内容的精要摘录
目录
URI(Universal Resource Identifier)
两个无可争议的用途
不要丢失面向资源的设计
REST与Web
《RESTful Web Services》
Web基础技术
- HTTP应用协议、URL命名标准、XML标记语言。
Web背后的一套设计原则
- 表示性状态转移(Representational State Transfer),或简称为REST。
REST这个词的由来
- 客户端通过“在PUT或POST请求里附加一个表示(representation)”来对资源状态进行处理(DELETE请求也差不多,只是没有表示而已),而服务器通过“在响应客户端的GET请求时附上表示”来处理应用状态。
《Java RESTful Web Service实战》
REST
- REST是一种分布式应用的架构风格,也是一种大流量分布式应用的设计方法论。REST是由(构成了Web基础架构的)HTTP、URI等规范的主要设计者Roy Fileding博士在其2000年的博士论文(《架构风格与基于网络的软件架构设计》)中提出的。
REST的实现
- REST就是Web本身的架构风格,是设计、开发Web相关规范、Web应用、Web服务的指导原则。不符合REST风格要求的架构和技术,很难在Web这个生态系统中得到繁荣发展。
- HTTP本身就是一种REST风格的应用协议,以REST风格来使用HTTP,才是最高效的使用方式。
- HTTP+URI+XML是REST的基本实现形式,但不是唯一的实现形式。
《架构风格与基于网络的软件架构设计》
开发 REST 的动机
- 为 Web应该如何运转创建一种架构模型,使之成为 Web 协议标准的指导框架。
REST这个词的由来
- REST 的第一版开发于 1994 年 10 月和 1995 年 8 月之间,起初是作为当我编写 HTTP/1.0规范和最初的 HTTP/1.1 建议时,用来沟通各种 Web 概念的一种方法。它在随后的 5 年中以迭代的方式不断改进,并且被应用于各种 Web 协议标准的修订版和扩展之中。
- REST 最初被称作“HTTP 对象模型”,但是那个名称常常引起误解,使人们误以为它是一个 HTTP 服务器的实现模型。
- 这个名称“表述性状态转移”是有意唤起人们对于一个良好设计的 Web 应用如何运转的印象:一个由网页组成的网络(一个虚拟状态机),用户通过选择链接(状态转移)在应用中前进,导致下一个页面(代表应用的下一个状态)被转移给用户,并且呈现给他们,以便他们来使用。
面向资源的架构
如何实现REST式的API
极限面向对象
ROA的3个概念
资源(resource)
- 任何事物,只要具有被引用的必要,他就是一个资源(resource)。如果你的用户“想为它创建一个超文本链接,关于它作一些断言,获取或缓存它的表示,在其他表示里包含它的一部分,标注它,等等”,那么你应该将它作为一个资源。
- 通常,一个资源就是某个可以存放在计算机上并体现为比特流的事物,比如:一个文档、数据库里的一条记录,或者运行某算法的结果,等等。
URI(Universal Resource Identifier)
- 统一资源标识符(Universal Resource Identifier)
- URI既是资源的名称,也是资源的地址。如果一则信息没有URI,它就不能算是一个资源,也不能算真正在Web上,而只能算作描述另一个资源的一些数据。
表示(representations)
- 资源是表示(representations)的来源,表示只是关于资源当前状态的一些数据。因为大多数资源本身就是一些数据项(就像“待解决bug列表”一样),所以对一个资源来说,最容易想到的一个表示就是这些数据本身。服务器可以采用XML文档、网页或逗号分割文本(comma-separated text)格式来表达“待解决bug列表”。“2004年第4季度的销量”可以采用数字或图表的形式来表达。许多新闻网站在发布文章时,既提供富含广告的格式,也提供简单、便于打印的格式。它们是同一资源的不同表示。
ROA的4大特性
可寻址性
-
如果一个Web服务将其数据集里有价值部分作为资源(resource)发布出来,那么该应用就是可寻址的(addressable)。每个资源都有唯一的URI——其实,URI正是“统一资源标识符(Universal Resource Identif