Django—— restful设计风格

RESTful Api 设计风格

协议:API 与用户的通信协议,总是使用 HTTPS 协议

域名:应该尽量将 API 部署在专用域名之下,如果确定 API 很简单,不会有进一步的扩展,可以考虑放在主域名之下。

版本:

路径:表示 API 的具体网址,每个网址代表一种资源,所以网址中不能有动词,只能有名词,并且所用的名词往往与数据库的表名对应。数据库中的表示记录同种数据的集合,所以 API 中的名词也应该使用复数。

获取所有学生:

使用正确的 HTTP 请求方法

打开
方式 解释
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 应该提供参数,过滤返回结果

例子
描述 方式
指定返回记录的数量 GET /students/?limit=
指定返回记录的开始位置 GET /students/?offset=
指定返回第几页数据,以及每页的记录数 GET /students/?page=&per_page=
指定返回结果按照哪个属性排序,以及排序的顺序 GET /students/?sortby=&order=
指定筛选条件 GET /students/?student_age_gt=

注意:参数的设计允许存在冗余,即允许 API 路径和 URL 参数偶尔有重复

状态码

服务器向客户端返回的状态码和提示信息

错误处理

如果错误码是 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 格式

API 文档规范要求

一、 写明该接口的功能是什么

二、 请求的 URL 是什么

三、 请求方式是什么(POST、GET、 DELETE、PUT、 PATCH等)

四、 参数是什么,此处还需说明你的参数名、参数类型、是否必填、参数的简单解释

五、 请求成功时的响应内容(实际开发中,要与前端同事沟通使用什么样的数据结构),并且对其中的字段做出说明(包括含义、数据类型,数据结构<字符串,数组,字典等>)

六、 请求失败时的响应内容,并且对其中的字段做出说明(包括含义、数据类型,数据结构<字符串,数组,字典等>)包括单独的对错误码的说明

七、 请求样例(返回结果部分要包括成功的情况和失败的情况)

八、 最好写上文档的编写人和编写时间(可不写)

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': '该人已离职'
}

作者:rottengeek
原文链接:http://t.cn/RgC0MIP

第 19 期【Python自动化运维入门】正在火热招生中
第 8 期【Python自动化运维进阶】正在招生中

各位小伙伴们,详情请扫码咨询:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容