RESTful Web Services 学习笔记1

一,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上去考虑如何配合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tronhon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值