统一接口REST VS RPC
REST使用HTTP协议的通用方法作为统一接口的词汇,方法信息都在HTTP方法里;
RPC服务提供的方法信息在SOAP/HTTP信封里。
REST方法设计
HTTP请求方法可以从安全性和幂等性进行考虑:
安全性:外系统对该接口的访问不会使服务器资源的状态发生改变;
幂等性:外系统对统一REST接口访问得到的资源状态是相同的。
方法名 | 幂等性 | 安全性 | 补充 |
---|---|---|---|
GET | 幂等 | 安全 | 只读的, 但是设计不良的API可能造成假GET |
PUT | 幂等 | 不安全 | 更新/添加资源,添加资源只有当客户端创建连接请求的时候使用PUT |
DELETE | 幂等 | 不安全 | 删除资源,可以返回void |
POST | 不幂等 | 不安全 | 添加资源;RESTful中为POST(a),RPC中为POST(p),需要先解析信封才能获取真正方法 |
WebDAV 对HTTP1.1的扩展协议,增加了些协作方法,但是违背了REST统一接口受歧义。
Demo
REST资源设计
资源地址的设计是面向资源的,资源名称应是准确描述该资源的名词,资源地址应具有直观的描述性。一个URI资源地址唯一对应一个资源,但是一个资源可以拥有多个RUI资源地址。
资源地址的设计良否涉及系统的可用性、可维护性和可扩展性等诸多方面的表现。
资源地址
资源地址具体可以分为五个部分: scheme://host:port/path?queryString
元素 | 描述 |
---|---|
scheme | 协议名称,通常是HTTP和HTTPS |
host | (DNS)主机名或IP地址 |
port | 服务端口 |
path | 资源地址,用“/“符号分隔逻辑上的层级结构 |
? | 用来分隔资源地址和查询字符串的符号 |
queryString | 查询字符串,方法作用域信息 使用”&“符号分隔查询条件 使用逗号分隔有次序的作用域信息 使用分号分隔五次序的作用域信息 |
功能 | 资源地址 | 说明 |
---|---|---|
添加/创建 | POST /books PUT /books/{id} |
|
删除 | DELETE /books/{id} | |
修改/更新 | PUT /books/{id} | |
查询全部 | GET /books HTTP1.1 | |
主键查询 | GET /books/{id} HTTP1.1 GET /books?id=132456789 |
|
分页作用域查询 | GET /books?start=0&size=10 GET /books/01,2002-12,2014 GET /books/restful;program=java;type=web GET /books?limit=100&sort=bookname |
起始页0,页条10; 逗号分隔次序:2002年1月到2014年12月 分号做并列查询,查询条件同级 每页100条,按书名排序 |