谈谈接口协议
谈谈前端对接口的要求,以及它会带来的好处
什么是协议:
所谓的协议就是指大家都认同的一个标准规范,并且大家都承诺严格按照标准细节来执行。
前后端开发的协议:
站在一个前端的角度,我是这么来看待一个接口应该具有的细节的
1. 请求的方式
1.1 尽量参考RESTFUL的方式来设计,如读取(GET),新建(POST),修改(PUT),删除(DELETE),通过HTTP本身的含义来减少参数的传递
1.2 尤其要注明不同模块应该要有同一个风格的的请求方式,例如用GET来读取数据那么所有的读取操作都应该是GET
2. 请求的参数:
2.1 参数的传递命名要统一,如分页时的结构为{pageNo,pageSize, query}
2.2 每个不同的模块,请求参数的风格要保持一致
3. 接口的状态:成功、失败
3.1 状态的描述应该尽量简单
3.2 如果有额外的内容,应该要有一个定义好的状态码,并可以根据状态进行异常的细节说明。
3.3 通常情况下要求后端不能返回500异常
4. 接口的响应:
4.1 相同的操作类型,响应的数据结构要一致,如摘取列表的结果都为{total, items}
4.2 数据的控制参数(如分页数据,条目计数等,是否只读)
前端更关注的细节:
1. http 响应异常
1.1 这类型的异常通常是不可以预知的
1.2 把常见的异常码进行处理,如401,404,408,504等等
1.3 在http模块把这个内容进行同化并向后传递,让后面的代码可以无差别处理这部分异常
1.4 通过navigator.connection.onchange来监听网络的变化,优化网络异常体验
2. 超时的处理
通过我们通过OAuth的方式进行鉴权,在一定的时间后超时是肯定的,但怎么样可以给到用户一个更好的体验
2.1 把TOKEN的超时节点记录在localstorage中,每次进入系统就去查看是否需要刷新TOKEN
2.2 与后端商定使用refreshToken来更新TOKEN,当TOKEN超时后,拦截当前的所有请求,并同时请求新的TOEKN和refreshToken,在完成刷新TOKEN再执行被拦截的请求
通过框架来对接协议:
在前后端协议能够被很好地执行后,我们便可以通过框架的方式把相关的细节封装起来
1. 封装请求工具:主要包括URL处理、参数处理、服务端异常及HTTP异常处理、异常说明、回调数据预加工
2. API层封装:
2.1 返回数据的加工,使之适合状态层消费。
2.2 标准化数据输出:每个API的接口出来的结构要统一,如{succes, message, data}
2.3 建议通过ts来开发API支,使用interface来约束每个API接口的结果,把常用的操作直接封装在上级class中
2.2 请求防抖处理
结语:
好的接口定义可以直接降低前端很大一部分的工作量,实际开发中有很多操作可以直接通过上级类封装好,并且代码也更容易稳定下来。