RESTful Web Service
基本概念
REST 伪全称:Representational State Transfer
REST 真实全称:Application States Transfer among the resource's representation
资源表示(名词)之间的应用程序状态的转换
来源
相同资源表示在不同的应用程序之间可能有不同的状态,应用程序状态可以由资源表示(名词)来表示(动词)
实例:
资源表示:¥1000
应用程序及其状态
- 购买1个苹果:支付
- 购买1台 Apple:余额不足
REST 特征
资源表示(representations of resource) 名词
- 特点
- 无状态
- 统一接口
- URI 作为唯一标识
基于 REST 的架构由通过 URI 进行唯一标识的资源信息构建 - 支持多种信息格式
- XML
- JSON
- XHTML
- 以 API 文档的形式协商提出的新格式
- 关键思想
- 在 REST 系统中,资源被通过交换资源表示的形式操控
个人理解:资源表示就代表资源本身,操控资源表示就相当于间接操控资源 - 在 REST 系统中,通信主要通过资源表示的转移进行,状态被包含在资源表示之中
- 在 REST 系统中,资源被通过交换资源表示的形式操控
个人感受:REST 的关键思想就在于资源表示视角下对 资源 和 通信 的新理解
- 资源本身被抽象成资源表示
- 通信过程及通信产生的结果被抽象为资源表示的转移(个人认为这里的转移理解成变化也没什么问题),由于状态包含在资源表示之中,所以也可以理解为资源表示状态的转移(变化)
REST 的构成
- 资源:以 URI 为唯一标识的名词
- 方法:操控名词的动词
- POST:create
- GET:read
- PUT:update
- DELETE:delete
如何理解 Representation ?
presetation:演示
Representation:再演(误)
Representation is how you view the state(唯心主义并感)
使用动词来改变应用状态或表示
为什么要用 REST ?
-
基于 REST 的服务适用于
-
客户无需使用特定的 API
-
用户只需要使用标准的 HTTP
-
可以用服务器测试(console)
-
-
Uniformity
- URI 用作唯一标识
URI 是最抽象的标准化接口 - HTTP 统一接口
- URI 用作唯一标识
-
脚本语言友好
与传统 Web Service 对比
对比角度 | 传统 | RESTful |
---|---|---|
方法类型 | 客户方法为主 | URI 为主 |
HTTP 定位 | 传输方法 | 作为协议 |
数据 | 结构化 | 参数暴露,存在安全性问题 |
与 SOAP 对比
就课件上给的图片来看,处理过程基本一致,参数形式不同
SOAP Server 接收 XML request 返回 XML Response
REST Server 接收 HTTP request 返回 XML Request
按照个人理解,就是两套不同的消息传递机制,对应不同的交互方式,或者说两种视角下的消息传递
SOAP 将数据看作数据,将传输看作传输
REST 将数据看作资源,将传输过程及其结果看作状态转换
总结
根据信息传递角度划分
- RPC ~ XML:Remote Procedure Call ~ EXtensible Markup Language
远程过程调用,消息格式常采用 XML - SOAP ~ XML:Simple Object Access Protocol ~ EXtensible Markup Language
简单对象访问协议,协议指导下提供消息传递框架,消息格式常采用 XML - REST ~ JSON:Representational State Transfer ~ JavaScript Object Notation
表述状态转移,架构风格,基于这种架构风格可以实现方便的资源调用,消息格式常采用 JSON