API接口文档设计规范:打造高效沟通桥梁,Eolink助您成功!
281
2022-07-10
在项目开发中,web项目的前后端分离开发,需要由前后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发,到项目结束前都要一直维护。
为什么要写接口文档?
1、项目开发过程中前后端工程师有一个统一的文件进行沟通交流开发
2、项目维护中或者项目人员更迭,方便后期人员查看、维护
设计原则
充分理由:不是随便一个功能就要有个接口,也不是随便一个需求就要加个接口。每新建一个接口,就要有充分的理由和考虑,无意义的接口不仅增加了维护的难度,更重要是对于程序的可控性的大大降低,接口也会十分臃肿。
职责明确:一个接口只负责一个业务功能,比如查询会员,但不要在查询会员的同时还有修改权限等类似的其他业务功能,应该分成两个接口做。
高内聚低耦合:一个接口要包含完整的业务功能,而不同接口之间的业务关联要尽可能的小。
分析角度明确:设计接口分析的角度要统一明确。否则会造成接口结构的混乱。
入参格式统一:所有接口的参数格式要求及风格要统一,不要一个接口参数是逗号分隔,另一个就是数组;不要一个接口日期参数是x年x月x日风格,另一个就是x-x-x。
状态及消息:提供必要的接口调用状态信息。调用是否成功?如果失败,那么失败的原因是什么。这些必要的信息必须要告诉给客户端。
控制数据量:一个接口返回不应该包含过多的数据量,过多的数据量不仅处理复杂,对数据传输的压力也非常大,会导致客户端反应缓慢。过多的数据量很多时候都是接口划分不明确。
常见的几种接口形式
1、HTTP 接口(RESTful)
基于HTTP协议开发的接口现在应用是最为广泛的,这类API使用起来简单明了,因为它是轻量级的、跨平台、跨语言的,但凡是第三方提供的API都会有HTTP版本的接口。
RESTful API也是基于HTTP协议的,只不过RESTful它并不是一种规范,它是一种设计准则,用不同的HTTP动词(GET、POST、DELETE、PUT等)来表达不同的请求。
2、RPC 接口
RPC技术是指远程过程调用,它本质上是一种Client/Server模式,可以像调用本地方法一样去调用远程服务器上的方法,它支持多种协议(如:HTTP、TCP、UDP、自定协议)和多种数据传输方式(如:Json、XML、Binary、Protobuf等)。
3、Web Service 接口
Web Service其实是一种概念,我们可以将以WEB形式提供的服务称为Web Service,所以像RESTful、XML-RPC、SOAP等都可以当成是Web Service的一种实现方式。
不过Web Service接口和HTTP接口存在一些细小区别就是,Web Service接口支持更复杂的对象,而HTTP接口更多的就是传输字符串或者JSON文本。
我们这里以RESTful风格的HTTP接口为例
RESTful API
REST 全称:RE presentational State Transfer,英文翻译过来就是“表现层状态转化”
用URL定位资源、用HTTP动词(GET、POST、PUT、DELETE)描述操作
基于REST构建的API就是Restful风格。
接口说明
接口描述
准确描述出 使用者,做什么操作,产生什么影响。
请求地址
请求地址中,我们应该写清楚协议,也就是使用http还是https,有些平台已经是强制只能使用https了,因为更加安全。
URL注意事项
不用大写
用中杠-不用下杠_
URI中的名词表示资源集合,使用复数形式
资源集合 vs 单个资源
URI表示资源的两种方式:资源集合、单个资源。
资源集合:
/zoos //所有动物园
/zoos/1/animals //id为1的动物园中的所有动物
1
2
单个资源:
/zoos/1 //id为1的动物园
1
HTTP 与 HTTPS 区别
HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。
请求方式
请求方法有很多同,但是最常用的是GET,POST,如果使用 RESTful 规范,还会使用到等其他请求方法。
GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
DELETE(DELETE):从服务器删除资源。
1
2
3
4
5
请求头
请求头通常用来传递一些公用的参数,比如Content-Type,Accept,Cookie,Authorization等。
公共参数
以下三种参数是我们需要明确的
Authorization 是否需要认证
Accept 代表客户端希望接受的数据类型 一般是json
Content-Type 代表发送端(客户端|服务器)发送的实体数据的数据类型 一般是json
字符编码
均使用UTF-8编码
参数说明
请求参数
Parameter Name Required Type(length) Format Description(EN) Description Sample
字段 是否必填 类型(最大长度) 格式 英文说明 说明 例子
类型是属性类型,只有String、Number、Object、Array四种类型;
响应参数
Parameter Name Type Format Description(EN) Description Sample
字段 类型 格式 英文说明 说明 例子
状态码参考
约定大于配置,配置大于编码
200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
1
2
3
4
5
6
7
8
9
10
11
12
SAMPLE
Request URL
https://{domain}/serviceName/v1/admin/sorting
1
Request Body
{
"Id": 1,
"sortingResult": "A",
"sortingMemo": "第一次分类"
}
1
2
3
4
5
Response Body
//成功输出示例
{
"Response": {
"Status": "200",
"ErrorCode": 0,
"ErrorMessage": NULL,
"Data": {
}
}
}
//失败输出示例
{
"Response": {
"Status": "400",
"ErrorCode": "e.cmm.5000",
"ErrorMessage": "Validation error.",
"Data": {
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1)服务器;
2)数据及格式;
3)安全;
4)会话及响应码。
测试环境: 准生产环境: 生产环境: 本文档使用 host/requestPath 的形式描述请求路径。
采用https信道加密技术来保证通信安全; 其它安全措施,待定;
1)所有客户端请求数据使用post方式发送; 2)报文数据使用json封装;http Content-Type选项为application/json。
{ param1:value1, ........ paramn:valuen, }
{ respCode:code, respMsg:msg, respData:{}, }
code | 说明 |
---|---|
0 | 成功 |
100 | 参量错误 |
300 | 服务不可用(访问路径错误、无访问权限) |
参量名称 | 说明 | 类型 |
---|---|---|
apiVersion | 服务器api版本号 | string |
appVersion | 客户端版本号 | string |
deviceId | 设备id | string |
requestPath:login
请求参量
参量名称 | 说明 | 类型 |
---|---|---|
userName | 用户名 | string |
passWord | md5(真实的用户密码) | string |
说明:用户的登录状态与设备绑定;以便完成推送功能和踢出登录功能。
respData参量: 无
requestPath:logout
参量名称 | 说明 | 类型 |
---|---|---|
userName | 用户名 | string |
respData参量: 无
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~