RESTful学习笔记01
qile 2021/6/26 Node.jsRESTful REST 是什么?
为什么叫 REST ?
- Representational State Transfer
- Representational 数据的表现形式(JSON、XML)
- State:当前数据状态或者数据
- Transfer:数据传输
通过 REST 的 6 个限制详细了解它
- 客户端-服务端(Client-Server)
- 关注点分离(前后端分离)
- 服务端专注数据存储,提升了简单性
- 前端专注用户界面,提升了可移植性
- 无状态(Stateless)
- 所有用户会话信息都保存在客户端
- 每次请求必须包括所有信息,不能依赖上下文信息
- 服务端不用保存会话信息,提升了简单性、可靠性、可见性
- 缓存(Cache)
- 所有服务端响应都要被标记为可缓存或不可缓存
- 减少前后端交互,提升了性能
- 统一接口(Uniform Interface)
- 统一接口突出了 REST 的特点
- 接口设计尽可能一通用,提升了简单性,可见性
- 接口与实现解耦,是前后端可以独立开发迭代
- 分层系统(Layered System)
- 客户端只知道相邻的一层,后面隐藏的就不知道
- 客户端不知道是和代理还是真是服务器通信
- 其它层:安全层、负载均衡、缓存层...
- 按需代码(Code-On-Demand 可选)
- 客户端可以下载运行服务端传来的代码(eg:js eval())
- 通过减少一些功能,简化了客户端
统一接口的限制
- 资源是任何可以命名的事物,比如用户、评论等
- 每个资源可以通过 URI 被唯一地标识
- https://api.github.com/users
- https://api.github.com/users/qile3372
- 通过表述来操作资源
- 表述就是 Representation,比如 JSON、XML 等
- 客户端不直接操作(比如 SQL)服务端资源
- 客户端应该通过表述(比如 JSON)来操作资源
- 自描述消息
- 每个消息(请求或响应)必须提供足够的信息让接受者理解
- 媒体类型(application/json、application/xml)
- HTTP 方法:GET(查)、POST(增)、DELETE(删)、PUT(改)
- 是否缓存:Cache-Control(在响应头里面)
- 超媒体作为应用状态引擎
- 超媒体:带文字的链接
- 应用状态: 一个网页
- 引擎:驱动、跳转
- 合起来:点击链接跳转到另一个网页
什么是 RESTful API
RESTful API 具体长什么样子?
- 基本的 URI,如https://api.github.com/useres
- 标准 HTTP 方法,如 GET,POST,PUT.PATCH,DELETE
- 传输的数据媒体类型,如 JSON,XML
请求设计规范
- URI 使用名词,尽量用复数,如 /users
- URI 使用嵌套表示关联关系,如/users/12/repos/5
- 使用正确的 HTTP 方法,如 GET/POST/PUT/DELETE
- 不符合 CURD 的情况:post/action/子资源
响应设计规范
- 查询
- 分页
- 字段过滤
- 状态码 2xx 正常 ; 3xx 缓存 ; 4xx 客户端错误 ; 5xx 服务端错误
安全
开发者友好