前后端对接规范

1,482 阅读5分钟

前后端对接规范

流程定义

  • 后端编写和维护接口文档,在 API 变化时更新接口文档
  • 后端根据接口文档进行接口开发
  • 前端根据接口文档进行开发 + Eolinker 平台
  • 开发完成后联调和提交测试
graph TD
前后端讨论接口-->后端整理接口文档
后端整理接口文档-->后端接口录入Eolinker接口管理平台
后端接口录入Eolinker接口管理平台-->后端开发服务接口
后端接口录入Eolinker接口管理平台-->前端构建mock服务
后端开发服务接口--> 对接集成
前端构建mock服务--> 对接集成

职责分离

  • 前后端仅仅通过异步接口 (AJAX/JSONP) 来编程
  • 前后端都各自有自己的开发流程,构建工具,测试集合
  • 关注点分离,前后端变得相对独立并松耦合
后端 前端
提供数据 接收数据,返回数据
处理业务逻辑 处理渲染逻辑
Server-side MVC 架构 Client-side MV* 架构
代码跑在服务器上 代码跑在浏览器上

协议规范

  • GET : 用于从服务器获取资源信息
  • POST : 用于创建新资源
  • PUT : 用于完整的替换资源或者创建指定身份的资源
  • DELETE : 用于删除某个资
  • PATCH : 用于局部更新资源

返回数据规范

数据格式

正常格式:

需要定义单个数据、集合数据、可能有可能无数据、分页数据、流数据、二进制数据、认证加密数据

异常格式:

异常数据描述格式,包括异常名称、异常发生位置、异常描述

数据编码:

Content-Type: application/json; charset=utf-8

状态码

请求成功状态码标识

  • 200 : 求执行成功并返回相应数据
  • 201 : 创建成功并返回相应资源数据
  • 202 : 接受请求,但无法立即完成创建行为
  • 204 : 请求执行成功,不返回相应资源数据

重定向

  • 301 : 被请求的资源已永久移动到新位置
  • 302 : 请求的资源现在临时从不同的 URI 响应请求
  • 303 : 对应当前请求的响应可以在另一个 URI 上被找到,客户端应该使用 GET 方法进行请求
  • 307 : 对应当前请求的响应可以在另一个 URI 上被找到,客户端应该保持原有的请求方法进行请求

条件请求

  • 304 : 资源自从上次请求后没有再次发生变化,主要使用场景在于实现数据缓存
  • 409 : 请求操作和资源的当前状态存在冲突。主要使用场景在于实现并发控制
  • 412 : 服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个。主要使用场景在于实现并发控制

客户端请求错误

  • 400 : 请求体包含语法错误
  • 401 : 需要验证用户身份
  • 403 : 服务器拒绝执行
  • 404 : 找不到目标资源
  • 405 : 不允许执行目标方法,响应中应该带有 Allow 头,内容为对该资源有效的 HTTP 方法
  • 406 : 服务器不支持客户端请求的内容格式
  • 410 : 被请求的资源已被删除
  • 413 : POST 或者 PUT 请求的消息实体过大
  • 415 : 服务器不支持请求中提交的数据的格式
  • 422 : 请求格式正确,但是由于含有语义错误,无法响应
  • 428 : 要求先决条件,如果想要请求能成功必须满足一些预设的条件要求先决条件,如果想要请求能成功必须满足一些预设的条件

服务端错误

  • 500 : 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理
  • 502 : 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应
  • 501 : 服务器不支持当前请求所需要的某个功能
  • 503 : 由于临时的服务器维护或者过载,服务器当前无法处理请求

团队约定(标准返回方式)

{
   "code":200, // 1.成功为200, 2.其他非200
    "data": {
        "id":"1001",
        "name":"张三",
        "age":"20"
    },
    "msg":"成功", //  1.成功信息, 2其他返回对应信息 
}

URL规范

GET https//domain.com/api/模块名/菜单名/接口名/:param
  • 不能使用大写,用中横线 - 不用下划线 _ ;
  • 使用名词表示资源集合,使用复数形式(为确保所有API URIs保持一致),不能使用动词;
  • 每个资源都至少有一个标识它的URI,同时应该遵循一个可预测的层次结构来提高可理解性,从而提高可用性;
  • 无需在URI中增加版本号,通过HTTP请求头信息的字段中进行区分(或者在URI包含主版本信息,同时请求头包含子版本信息。

本篇文章由一文多发平台ArtiPub自动发布