记一次RESTful api学习

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检测一下接口,如果允许跨域,再发起真实的请求

发布了5 篇原创文章 · 获赞 2 · 访问量 336

猜你喜欢

转载自blog.csdn.net/qq_34258791/article/details/104418773