What 什么是REST
表述性状态转移。一种web 服务的架构风格
Who 谁发明的REST
roy fielding 于2000年写的论文
核心
- 资源
- 统一接口
- 状态转移
REST成熟度模型
- http
- 表示抽象的资源
- 用http动词来表述对资源的增删改查
REST的问题
- 如何聚合多个接口返回的内容
- 浏览api如何能像浏览网页那样
资源表述
- 用名词来表述资源,用http方法来表述CRUD
- url 小写
- 什么时候使用下划线,什么时候用连字符?
- 资源的名词用复数表示
- 表述关联关系,可以有多级,例如:/user/1/address/1
- 当无法用http方法来表述谓词的时候,可以这样:
- /products/actions/up
- /price_calc?schedule_id={}
- /repo/fock
- 用过滤器来表示复杂的查询,例如/users?limit=10
- 多个单词的名词,用破折线分割表示路径,用下划线分割表示属性
request
- 请求的header中加入request-id,用于定位请求日志
- 请求的header中指定需要返回的内容格式
- 尽可能用json表示请求体的内容,因为有类型信息,且支持嵌套
response
- 用http状态码表示请求的成功失败
- 请求失败,返回易于机器读的错误码和易于人读的错误信息
- 资源新建成功,同时返回新建的资源
- 用UTC,ISO8601 格式化时间yyyy-MM-ddTHH:mm:ssZ
缓存
- http cache-control
- http conditional request
2.1 ETag
2.2 Last_Modified