一,REST简介
1,RESTful 制定了关于构建贴切而不是绕开Web理念的服务路线图
特点:贴切而且不绕开Web服务理念
使用Web服务回归“web”的理念,教学如何使用日常的技术来访问programmable web。
REST就是用来支撑Web架构风格的。
2,本书重点
(1)强调Web基础技术
HTTP协议+URI命名标准+XML标记语言的强大能力以及用法
(2)介绍了面向资源的架构ROA,一组 用于设计REST式Web服务的原则
(3)揭示了REST为何比RPC式设计更简单,更具多功能性以及可伸缩性。
(4)给出了REST式Web服务的真实案例,比如Amazon S3
(5)讨论各种流行编程语言的Web服务客户端
(6)展示了如何使用三种流行框架–Ruby on Rails,Restlet(Java),Django(Python)实现REST式的服务,这三种框架可以简化REST式Web服务的开发。
(7)设计和实现REST式Web服务及客户端
3,本书将REST设计理念应用于真实Web服务的书,它提供了一些可编程实践的最佳实践,以及把设计转化为代码的一些技巧。你可以使用Web强大能力来构建可编程应用。注意:你要遵从Web理念而不是违反它。
4,REST
(1)Web背后的一套设计原则–表示性状态转移
(2)使用面向资源的架构(ROA)作为用于设计REST式Web服务的一组切合实际的原则。
(3)编写客户端程序来调用REST式服务。我们将采用真实的REST式服务作为案例。
5,HTTP的可寻址性以及无状态性。
Web赖以生存的技术还有URL,HTML以及XML。万维网是一个简单而灵活的分布式编程环境。
6,被用于实现基于HTTP的远程过程调用(RPC)。可以说有时采用RPC框架是比较合适的,但是有比Web的优点更为重要的需求要考虑。
7,RPC框架
通过一个复杂的,编程语言式接口,来暴露其内部的算法–这种接口的服务就是,每个服务的作用或者服务类别不是不相同的。
8.REST
而REST框架使用的ROA服务则是通过一个简单的,文档处理接口,来暴露其内部数据,这种接口就是统一的。因此相比较于RPC框架就比较简单实现。
三种比较常见的web服务式架构
RPC架构+REST式架构+REST-RPC式混合架构。
REST的四个重要概念:
资源+资源名称+资源表示+资源间的链接。它的服务应该根据四个REST特征来判断或者评判:可寻址性+无状态性+连通性+统一接口。
二,重点的知识总结
1. 要深入理解REST,需要理解REST的五个关键词:
资源(Resource)
资源的表述(Representation)
状态转移(State Transfer)
统一接口(Uniform Interface)
超文本驱动(Hypertext Driven)
(1)什么是资源?
资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且客户端应用开发者能够理解。与面向对象设计类似,资源是以名词为核心来组织的,首先关注的是名词。一个资源可以由一个或多个URI来标识。URI既是资源的名称,也是资源在Web上的地址。对某个资源感兴趣的客户端应用,可以通过资源的URI与其进行交互。
(2)什么是资源的表述?
资源的表述是一段对于资源在某个特定时刻的状态的描述。可以在客户端-服务器端之间转移(交换)。资源的表述可以有多种格式,例如HTML/XML/JSON/纯文本/图片/视频/音频等等。资源的表述格式可以通过协商机制来确定。请求-响应方向的表述通常使用不同的格式。
(3)什么是状态转移?
状态转移(state transfer)与状态机中的状态迁移(state transition)的含义是不同的。状态转移说的是:在客户端和服务器端之间转移(transfer)代表资源状态的表述。通过转移和操作资源的表述,来间接实现操作资源的目的。
(4)什么是统一接口?
REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。以HTTP/1.1协议为例,HTTP/1.1协议定义了一个操作资源的统一接口,主要包括以下内容:
(5)7个HTTP方法:
GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS
HTTP头信息(可自定义)
HTTP响应状态代码(可自定义)
一套标准的内容协商机制
一套标准的缓存机制
一套标准的客户端身份认证机制
REST还要求,对于资源执行的操作,其操作语义必须由HTTP消息体之前的部分完全表达,不能将操作语义封装在HTTP消息体内部。这样做是为了提高交互的可见性,以便于通信链的中间组件实现缓存、安全审计等等功能。
(6)什么是超文本驱动?
“超文本驱动”又名“将超媒体作为应用状态的引擎”(Hypermedia As The Engine Of Application State,来自Fielding博士论文中的一句话,缩写为HATEOAS)。将Web应用看作是一个由很多状态(应用状态)组成的有限状态机。资源之间通过超链接相互关联,超链接既代表资源之间的关系,也代表可执行的状态迁移。在超媒体之中不仅仅包含数据,还包含了状态迁移的语义。以超媒体作为引擎,驱动Web应用的状态迁移。通过超媒体暴露出服务器所提供的资源,服务器提供了哪些资源是在运行时通过解析超媒体发现的,而不是事先定义的。从面向服务的角度看,超媒体定义了服务器所提供服务的协议。客户端应该依赖的是超媒体的状态迁移语义,而不应该对于是否存在某个URI或URI的某种特殊构造方式作出假设。一切都有可能变化,只有超媒体的状态迁移语义能够长期保持稳定。
一旦读者理解了上述REST的五个关键词,就很容易理解REST风格的架构所具有的6个的主要特征:
面向资源(Resource Oriented)
可寻址(Addressability)
连通性(Connectedness)
无状态(Statelessness)
统一接口(Uniform Interface)
超文本驱动(Hypertext Driven)
这6个特征是REST架构设计优秀程度的判断标准。其中,面向资源是REST最明显的特征,即,REST架构设计是以资源抽象为核心展开的。可寻址说的是:每一个资源在Web之上都有自己的地址。连通性说的是:应该尽量避免设计孤立的资源,除了设计资源本身,还需要设计资源之间的关联关系,并且通过超链接将资源关联起来。无状态、统一接口是REST的两种架构约束,超文本驱动是REST的一个关键词。
这次主要基于Lynda上的这个视频教程记录下自己的理解。
2. 资源并不是对底层存储对象或者程序Model的直接映射
正确的思路应该是,忘记什么数据库和程序Model,只从HTTP的角度考虑,根据业务,需要设计哪些资源(url),GET/POST时接受和响应哪些参数,把这些敲定之后,再从数据库和程序Model上去考虑如何配合。