Django-drf-Restful规范
web开发模式
前后端混合开发:较传统的开发模式,前后端不分离,可以说是全栈开发。后端返回前端的是HTML页面,需要在前端写模板语言
前后端分离:只专注于写后端接口,返回JSON或xml格式的数据(一般都是JSON格式的数据)。这种模式极大的改变了编码思想,后端和前端的概念变的清晰了
Restful规范
Restful与技术无关,代表的是一种软件架构风格,全称:Representation State Transfer,中文:表征特性状态转义
Restful是一种web api接口的设计风格,尤其适用于前后端分离的应用模型中。
这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的url路径就表示要操作的数据资源
由于Restful是一种软件架构风格,与技术无关,所以可以使用任意一个框架都可以实现符合Restful规范的api接口
Restful的十条规范
1、数据安全保障:url连接一般都采用HTTPS协议进行传输,提高数据交互过程中的安全性
2、接口特征表现:看到url就知道是api接口
1 # 用api关键字标识接口url 2 # 看到api字眼,就代表该url链接是完成前后端数据交互的 3 https://api.example.com/ # 在域名带api 4 https://www.example.com/api/xx # 路径拼接api
3、多数据版本共存
1 # 在url链接中标识数据版本 2 https://api.example.com/v1/xx 3 https://api.example.com/v2/xx 4 # url链接中的v1 v2就是不同数据版本的体现(只有在一种数据资源有多版本情况下使用)
4、数据即资源,使用名词表示(可复数)
接口一般都是完成前后端数据的交互,交互的数据就是资源
1 https://api.example.com/users 2 https://api.example.com/books 3 https://api.example.com/book 4
5 # 一般提倡使用资源的复数形式,在url链接中尽量不要出现操作资源的动词,如 6 https://api.example.com/delete-user
特殊的接口可以出现动词,因为这些接口一般没有一个明确的资源,或动词的含义就是接口的核心含义
1 https://api.example.com/place/search 2 https://api.example.com/login
5、资源操作由请求方式决定
常用的几种请求方式
1 # get 查询所有数据,url不加主键 2 https://api.example.com/books 3 4 # get请求 查询一条数据,url中加主键值 5 https://api.example.com/books/1 6 7 # post请求 新增一条数据 8 9 # put请求 整体修改一条数据 10 11 # patch请求 局部修改一条数据 12 13 # delete请求 删除一条数据
6、过滤,通过在url上传参数的形式传递搜索条件
1 # limit 指定返回记录的数量 2 https://api.exaple.com/v1/zoos?limit=10 3 4 # offset 指定返回记录的开始位置 5 https://api.exaple.com/v1/zoos?offset=10 6 7 # 指定第几页,以及每页的记录数 8 https://api.exaple.com/v1/zoos?page=20&per_page=100 9 10 # 指定返回结果按照哪个顺序排序,以及排序顺序 11 https://api.exaple.com/v1/zoos?sortby=name&order=asc 12 13 # 指定筛选条件 14 https://api.exaple.com/v1/zoos?animal_type_id=1
7、通过响应状态码标识请求结果
1 # 正常响应 2 200 # 常规请求 3 201 # 创建成功 4 5 # 重定向响应 6 301 # 永久重定向 7 302 # 临时重定向 8 9 # 客户端异常 10 403 # 无权限 11 404 # 请求路径不存在 12 405 # 请求方法不存在 13 14 # 服务器异常 15 500 服务器异常
8、错误处理,应返回错误信息,一般error当做key
{ "error": "无权限操作" }
9、返回结果规范,针对不同的操作,服务器应向用户返回的结果对象也不通
GET /collection # 返回资源对象的列表(数组) GET /collection/1 # 返回单个资源对象 POST /collection # 返回新生成的资源对象 PUT /collection/resource # 返回完整的资源对象 PATCH /collection/resource # 返回完整的资源对象 DELETE /collection/resource # 返回空文档,但是实际项目中不推荐返回空,可以返回删除是否成功、状态码
10、请求的结果提供需要访问资源的请求链接,即返回的结果中提供链接,连向其他api的方法,使得用户不用查文档,也知道下一步该怎么做
1 { 2 "status":0, 3 "msg":"ok", 4 "results":[ 5 { 6 "name":"肯德基", 7 "img":"https://image.baidu.com/kef/001.png" # 可以带url 8 } 9 ... 10 ] 11 }
总结
由于前后端分离的开发模式,出现了类似于restful这样的开发规范
restful规范仅是一种开发规范,并不意味着开发过程中,都必须要遵守规范。
END.
浙公网安备 33010602011771号