前言
RESTfulapi是开发中常用的概念,那什么是REST,什么又是RESTfulapi?
REST介绍
REST是Representational State Transfer的缩写
Representational :数据的表现形式(JSON、XML...)
State:当前状态或者数据
Transfer:数据传输
看字面意思还是不太懂,没关系,接着看:
标准的 REST 六个限制如下:
1.客户端-服务器
参考内容:客户端-服务器模型
- 关注点分离
- 服务端专注数据存储,提升简单性
- 前端专注用户界面,提升可移植性
2.无状态
参考内容:无状态协议
- 所有用户会话信息都保存在客户端
- 每次请求必须包括所有信息,不能依赖上下文信息
- 服务端不用保存会话信息,提升简单性、可靠性、可见性
3.缓存
参考内容:网页缓存
- 所有服务端响应都要被标为可缓存或不可缓存
- 减少前后端交互,提升了性能
4.统一的接口
统一接口约束是设计任何REST服务的基础。
- 接口设计尽可能统一通用,提升了简单性、可见性
- 接口与实现解耦,使前后端可以独立开发迭代
5.分层系统
参考内容:分层系统
- 每层只知道相邻的一层,后面隐藏的就不知道了
- 客户端不知道是和代理还是真实服务器通信
- 其他层: 安全层,负载均衡,缓存层等
6.按需代码(可选)
参考内容:客户端脚本
- 客户端可以下载运行服务端传来的代码(比如JS)
- 通过减少一些功能,简化了客户端
统一的接口
上文中提到了REST的6个限制,其中统一的接口需要统一成什么样子的呢?
1.资源的标识
- 资源是任何可以命名的事物,比如用户,评论等
- 每个资源通过URI被唯一地标识
2.通过表述来操作资源 - 表述就是Representation,比如JSON,XML等
- 客户端不能直接操作(比如SQL)服务端资源
3.自描述的消息 - 每个信息(请求或响应)必须提供足够的信息让接受者理解
- 媒体类型(application/json、application/xml)
- HTTP方法:GET(查)、POST(增)、DELETE(删)等
- 是否缓存:Cache-Control
4.超媒体作为应用程序状态的引擎(HATEOAS) - 超媒体:带文字的链接
- 应用状态:一个网页
- 引擎:驱动、跳转
- 合起来:点击链接跳转到另一个网页
RESTfulapi介绍
RESTfulapi就是符合REST风格的api
RESTfulapi的设计规范
1.请求设计规范
- URI使用名词,尽量用复数,如/users
- URI使用嵌套表示关联关系,如/users/12/repos/5
- 使用正确的HTTP方法,如GET/POST/PUT等
- 不符合CRUD的情况:POST/action/子资源
2.响应式设计规范
- 查询
- 分页
- 字段过滤
- 状态码
- 错误处理
3.安全设计规范
- HTTPS
- 鉴权
- 限流
4.开发中友好设计规范
- 文档
- 超媒体