协议:API与用户的通讯协议,老是使用HTTPS协议前端
域名:应该尽可能将API部署在专用域名之下,若是肯定API很简单,不会有进一步的扩展,能够考虑放在主域名之下。python
版本:数据库
路径:表示API的具体网址,每一个网址表明一种资源,因此网址中不能有动词,只能有名词,而且所用的名词每每与数据库的表名对应。数据库中的表示记录同种数据的集合,因此API中的名词也应该使用复数。django
获取全部学生:json
方式 | 解释 |
---|---|
GET select | 从服务器获取资源(一项或者多项) |
POST create | 在服务器新建一个资源 |
PUT update | 在服务器更新资源(客户端提供改变后的完整资源) |
PATCH update | 在服务器更新资源(客户端提供改的属性) |
DELETE delete | 从服务器删除资源 |
HEAD | 获取资源的元数据 |
OPTIONS | 获取信息,关于资源的哪些属性是客户端能够改变的 |
描述 | 方式 |
---|---|
列出全部班级 | GET /grades/ |
获取某个指定班级编号的信息 | GET /grades/id |
列出某个指定编号的班级的全部学生 | GET /grades/id/students/ |
获取某个指定编号的学生信息 | GET /students/id |
建立一个学生 | POST /students/ |
更新某个指定学生的信息(信息所有由客户端提供) | PUT /students/id |
删除某个指定编号的学生 | DELETE /students/id |
删除某个指定班级的下的全部学生 | DELETE /grades/id/students/ |
若是资源数较多,服务器不能将全部数据一次所有返回给客户端,API应该提供参数,过滤返回结果segmentfault
描述 | 方式 |
---|---|
指定返回记录的数量 | GET /students/?limit= |
指定返回记录的开始位置 | GET /students/?offset= |
指定返回第几页数据,以及每页的记录数 | GET /students/?page=&per_page= |
指定返回结果按照哪一个属性排序,以及排序的顺序 | GET /students/?sortby=&order= |
指定筛选条件 | GET /students/?student_age_gt= |
注意:参数的设计容许存在冗余,即容许API路径和URL参数偶尔有重复api
服务器向客户端返回的状态码和提示信息数组
若是错误码是4xx,就应该向用户返回错误信息,通常来讲,返回的信息中将error做为键名,出错的信息做为键值便可服务器
{ error:'Invalid API KEY', }
针对不一样的操做,服务器向用户返回结果应该符合规范数据结构
方式 | 描述 |
---|---|
GET /students/ | 返回资源对象的列表 |
GET /students/id/ | 返回单个资源对象 |
POST /students/ | 返回新生成的资源对象 |
PUT /students/ | 返回完整的资源对象 |
PATCH /students/ | 返回完整的资源对象 |
DELETE /students/id/ | 返回一个空文档 |
返回结果中提供了连接,链向了其余的API方法,使得用户不查看文档,也知道下一步应该作什么
{ link:"www.sunck.wang/grades/" } { "link":{ "rel":"collection www.sunck.wang/index/", "href":"www.sunck.wang/grades/", "title":"List of Grades", "type":"application/json", } }
rel:表示这个API与当前网址的关系
href:表示API路径
title:表示API的标题
type:表示返回的类型
其余:服务器返回的数据尽可能使用JSON格式,避免使用XML格式
1、 写明该接口的功能是什么
2、 请求的URL是什么
3、 请求方式是什么(POST、GET、 DELETE、PUT、 PATCH等)
4、 参数是什么,此处还需说明你的参数名、参数类型、是否必填、参数的简单解释
5、 请求成功时的响应内容(实际开发中,要与前端同事沟通使用什么样的数据结构),而且对其中的字段作出说明(包括含义、数据类型,数据结构<字符串,数组,字典等>)
6、 请求失败时的响应内容,而且对其中的字段作出说明(包括含义、数据类型,数据结构<字符串,数组,字典等>)包括单独的对错误码的说明
7、 请求样例(返回结果部分要包括成功的状况和失败的状况)
8、 最好写上文档的编写人和编写时间(可不写)
Demo:
功能:获取某人的下属
URL:”people/api/v1/ subordinate”
请求参数说明:
参数名 | 类型 | 是否必填 | 备注 |
---|---|---|---|
uid | int | 是 | 用户的id |
请求成功参数说明
参数名 | 类型 | 说明 |
---|---|---|
code | Int | 响应状态码1表明成功 |
msg | string | 响应信息 |
data | 数组 | 数组内是字典类型,详情见下表 |
data内的响应参数说明
参数名 | 类型 | 说明 |
---|---|---|
uid | int | 下属的用户ID |
name | string | 下属的用户名 |
position | string | 下属的岗位 |
请求失败参数说明
参数名 | 类型 | 说明 |
---|---|---|
code | Int | 响应状态码非1值 |
msg | string | 错误提示信息 |
code值说明
Code | 说明 |
---|---|
1 | 成功 |
2 | 该人已经离职 |
3 | 请求参数不完整 |
4 | 参数类型错误 |
样例:
请求参数 uid 1
# 请求成功样例 { 'code': 1, 'msg': 'ok', 'data':[ { 'uid':2, 'name': 'Tom', 'position': '教师' }, { 'uid':3, 'name’: 'Lucy', 'position': '助教' } ] } # 请求失败样例 { 'data': 2, 'msg': '该人已离职' }