RESTFUL
API
REST(Representational Status Transfer) 一种软件设计风格,采用http协议,json数据格式
特点:
统一接口(Uniform Interface)
无状态(stateless)
可缓存(Cacheable)
分层(Layered System)
CS模式(client-server Atchitecture)
设计原则
以URL(统一资源定位符)风格设计API
通过不同的METHOD(GET,POST,PUT,DELETE)来区分资源的CRUD(增删改查)
返回码(Status Code)必须符合HTTP资源描述规定
方法 |
安全 |
幂等 |
GET |
YES |
NO |
HEAD |
YES |
NO |
OPTIONS |
YES |
NO |
PUT |
NO |
YES |
DELETE |
NO |
YES |
POST |
NO |
NO |
HTTP——可见性——保证一下可能正常工作
缓存:缓存响应内容,并在资源修改时使缓存自动失效
乐观并发控制:检测并发写入,并在操作过期的表述时防止资源发生变更
内容协商: 在给定资源的多个可用表述中选择合适的表述
安全性和幂等性:确保客户端可以重复或重试特定的HTTP请求
怎么实现可见性:
交互无状态 使用一个统一接口 编码格式明确区分标头和内容
怎么保持可见性:
语以要与HTTP所规定的语义保持一致,并添加适当的标头来描述请求和响应
使用适当的状态码和状态消息,以便处理、缓存和客户端可以决定请求的结果
内容协商
HTTP 服务器驱动(server-driver)协商 <- 请求头选择
代理驱动(agent-driver)协商 <-不同URI
客户端偏好
Accept头——设置偏好媒体类型
Accept-Language——设置偏好语言
Accept-Charset——设置偏好字符编码
Accept-Encoding——设置偏好压缩格式
服务器偏好
例如:
#针对英语表述的请求
GET /status HTTP/1.1
Host: www.example.org
Accept-Language:en;q=1.0,*/*;q=0.0
#响应
HTTP/1.1 200 OK
Content-Language:en
Vary: Accept-Language
#针对中文表述的请求
GET /status HTTP/1.1
Host: www.example.org
Accept-Language: zh;q=1.0,*/*;q=0.0
#响应
HTTP/1.1 200 OK
Content-Language:zh
Vary: Accept-Language
//保持请求URI不变,客户端及中间媒介可以根据Vary头中所列出的请求头的值来区分响应
安全性:客户端可以发起请求,并指导客户端不会改变资源的状态,无副作用
任何客户端都可以发起任意次数的GET、OPTIONS、HEAD请求
幂等性:保证客户端重复发起某个请求的效果与一次请求的效果一致
保证客户端可以在不能肯定服务器是否成功处理了请求时,重复发起这一请求