Rest的 6 个限制

REST是什么?

是个万维网软件架构风格
用来创建网络服务

为什么叫 REST?

Representational State Transfer
Representational: 数据的表现形式(JSON, XML等等…)
State: 当前状态或者数据
Transfer: 数据传输

REST 的 6 个限制

  1. 客户-服务器(CS 架构 Client-Server)

关注点分离
服务端专注数据存储, 提升了简单性
前端专注用户界面, 提升了可移植性

简单性: 让服务端代码更简单了. 以前服务端还要渲染页面, 还要存储, 现在只管写好数据存储的逻辑
可移植性: 一个软件可以方便的移植到其他平台. 过去的前端是在操作系统里写的软件, 前端还要管数据存储等逻辑, 现在的前端是浏览器的前端, 只需要调接口去渲染界面

  1. 无状态(Stateless)

所有用户会话信息都保存在客户端
每次请求必须包括所有信息, 不能依赖上下文信息
无状态的好处: 服务端不用保存会话,提升了简单性,可靠性,可见性

  1. 缓存 (Cache)

所有服务端响应都要被标为可缓存或不可缓存

  1. 统一接口(Uniform Interface)

接口设计尽可能统一, 提升了简单性, 可见性
接口与实现解耦, 使前后端可以独立开发迭代

  1. 分层系统(Layered system)

每层只知道相邻的一层, 后面隐藏的就不知道了
客户端不知道是和代理还是真实服务器通信
其它层: 安全层, 负载均衡, 缓存层等

  1. 按需代码(Code-On-Demand 可选的)

客户端可以下载运行服务端传来的代码(比如 js)
通过减少一些功能, 简化了客户端

详解第四个限制统一接口的限制

资源的标识

资源是任何可以命名的事物: 比如用户, 评论等
每个资源可以通过 URI 被唯一标识, 比如
https://api.github.com/users 这是用户的接口

通过表述来操作资源

表述就是 Representation, 比如 JSON, XML 等
客户端不能直接操作(比如 SQL)服务端资源
客户端应该通过表述(比如 JSON)来操作资源
比如 github 的接口样式

自描述信息

每个消息(请求或响应) 必须提供足够的信息让接受者理解
具体的消息是什么? 比如:

媒体类型(application/json, application/xml) 这个可以让接受者知道如何解析
HTTP 方法: get, post, delete
是否缓存: cache-control

超媒体作为应用状态引擎

超媒体: 带文字的链接
应用状态: 一个网页
引擎: 驱动, 跳转
合起来: 点击链接跳转到一个网页

猜你喜欢

转载自blog.csdn.net/m0_48446542/article/details/109082737