REST是什么?
万维网软件架构风格,即创建网络服务的
Representational State Tranfer
数据的表现形式(xml..) 当前状态或者数据(名字,表等) 数据传输
REST六个限制
1.客户端-服务器(client-server)
关注点分离:服务端专注数据存储,提升了简单性
前端专注用户界面,提升了可移植性
2.无状态(stateless)
所有会话信息都保存在客户端,每次请求必须包括所有信息,不能依赖上下文信息
好处是:服务器不用保存会话信息,提升了简单性,可靠性,可见性
简单性:服务端不需要写前端的逻辑, 专注后端代码,更加简单
可靠性:服务端一旦出现问题,保存的会话信息就会全部丢失,导致不可靠
可见性:每次请求必须包括所有信息,接口之间更加透明,很多信息传给后端
3.缓存(cache)
所有服务器响应都要被标记为可缓存或者不可缓存
缓存:变化性不大的文件,如css,html就可以缓存,常变的接口不能缓存
缓存的作用:减少前后端交互,提升性能
4.统一接口(Uniform Interface)
统一:接口设计尽可能统一通用,提升了简单性,可见性
接口的设计要规范统一,如同学校的学生穿上校服一样
简单性:学会了一个接口,学其他的很快上手,也更加透明
接口:接口与实现解耦,使前后端可以独立开发迭代
5.分层系统(Layered System)
每层只知道相邻的一层,后面隐藏的就不知道了
比如客户端不知道自己在和代理通信还是真实服务器通信
其他层:安全层,负载均衡,缓存层等
6.按需代码(Code-On--Demand 可选)
客户端可以下载运行服务器传来的代码,如js
统一接口的限制
1.资源的标识
资源是任何可以命名的事物,比如用户,评论等
每个资源都可以被URI唯一标识
https://xxx.xxx.xxx/users
2.通过表述来操作资源
表述就是Representation,如JSON,XML等
客户端只能通过表述操作资源
3.自描述信息
每个消息(请求或者响应)必须提供足够的信息让接收者理解
如媒体类型(application/json),HTTP方法(get, post, delete),是否缓存:Cache-control
4.超媒体作为应用引擎
超媒体:带文字的链接
应用状态:一个网页
引擎:驱动,跳转
意为:点击链接跳转到另一个页面
RESTful API
符合REST架构风格的API
包含三方面:
1.基本URI:https://api.github.com//users
2.标准HTTP方法:GET,POST,DELETE,PUT,PUSH
3.传输的数据媒体类型:JSON,xml
现实举例:
Get users/#
POST users/api
请求设计规范
URI使用名词,尽量使用复数 如/users
URI使用嵌套表关联关系 /user/12/repos/5
使用正确的HTTP方法
不符合CURD的情况:POST/action/子资源 action:查询字符串,
如转移仓库transfer POST /xx/:repo/transfer
响应设计规范
查询 分页 字段过滤 状态码 错误处理
安全
Https 鉴权 限流
koa:
注册路由:
app.use(router.routes()) //由router返回的routes()中间件注册
const usersRouter = new Router({prefix:'/users'}) //添加前缀
options作用
options是个请求方法
1.检测服务器所支持的请求方法
2.CORS中的预检请求
如何知道这个接口是否跨域了呢?用options检测一下接口,如果允许跨域,再发起真实的请求