Django-rest-framework框架/1-drf-drf入门规范
一 前后端开发模式
在开发Web应用中,有两种应用模式:
接口:请求数据是Json格式返回的也是Json格式
前后端混合开发>>>>
后端写好html页面套模版语法
前后端分离>>>>>后端只负责写接口(API接口)
后端接口数据没有出来前端使用mock假数据模拟开发
后端使用postman软件
联调项目
xdmin:前后端后台管理模版:layui+jquery 国人贤心
admin—lte:前后端管理模版:bootstrap+jquery
前后端不分离

前后端分离

二 API接口
为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本。通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点
- url长得像返回的数据格式
- 请求方式>>>>get,post,put,patch,delete
- 使用get方式请求接口
- 请求参数>>>>jaso,xml格式的key,value数据类型
- ak:6E823f587c95f0148c19993539b99295
- region: 上海
- query:肯德基
- output:json # 决定响应数据的格式
- 响应结果:json或xml格式的数据
- json响应的数据:
解析json格式的数据 https://www.json.cn/
![image]()
- json响应的数据:
{
"status":0,
"message":"ok",
"result_type":"poi_type",
"results":[
{
"name":"肯德基(天桥商场餐厅)",
"location":{
"lat":39.886868,
"lng":116.40469
},
"address":"北京市东城区永定门内大街1号天桥百货商场F2",
"province":"北京市",
"city":"北京市",
"area":"东城区",
"street_id":"083a55faa0069a60256e98ef",
"detail":1,
"uid":"083a55faa0069a60256e98ef"
},
{
"name":"肯德基(采育店)",
"location":{
"lat":39.66783,
"lng":116.640924
},
"address":"北京市大兴区福源路育新花园中里西北侧约110米",
"province":"北京市",
"city":"北京市",
"area":"大兴区",
"street_id":"10d74a5de959ae6a744ff1d0",
"detail":1,
"uid":"10d74a5de959ae6a744ff1d0"
},
{
"name":"肯德基(亦庄店)",
"location":{
"lat":39.807052,
"lng":116.487277
},
"address":"北京市大兴区西环北路18号星岛商务中心1~2层",
"province":"北京市",
"city":"北京市",
"area":"大兴区",
"street_id":"0523a14103d2bd04b23c8156",
"telephone":"(010)67897941,(010)67897942",
"detail":1,
"uid":"0523a14103d2bd04b23c8156"
},
{
"name":"肯德基(石佛营餐厅)",
"location":{
"lat":39.938005,
"lng":116.508717
},
"address":"石佛营东里117号楼首层",
"province":"北京市",
"city":"北京市",
"area":"朝阳区",
"street_id":"dfc496b60a5717b68936eeff",
"detail":1,
"uid":"dfc496b60a5717b68936eeff"
},
{
"name":"肯德基(东大桥餐厅)",
"location":{
"lat":39.929013,
"lng":116.455504
},
"address":"朝外大街东大桥路1号楼",
"province":"北京市",
"city":"北京市",
"area":"朝阳区",
"street_id":"f1f5cac50613478136b06c56",
"telephone":"(010)65525512",
"detail":1,
"uid":"f1f5cac50613478136b06c56"
},
{
"name":"肯德基(联想店)",
"location":{
"lat":40.052743,
"lng":116.280492
},
"address":"北京市海淀区软件园西三路10号院1号楼联想总部东区E1",
"province":"北京市",
"city":"北京市",
"area":"海淀区",
"street_id":"84fcd00cc911f7571b11d53b",
"telephone":"15010219215",
"detail":1,
"uid":"84fcd00cc911f7571b11d53b"
},
{
"name":"肯德基(团结湖餐厅)",
"location":{
"lat":39.936883,
"lng":116.473431
},
"address":"北京市朝阳区团结湖路7号",
"province":"北京市",
"city":"北京市",
"area":"朝阳区",
"street_id":"1311e6c6754c1fdec27da276",
"telephone":"(010)65825762",
"detail":1,
"uid":"1311e6c6754c1fdec27da276"
},
{
"name":"肯德基(苏州桥餐厅)",
"location":{
"lat":39.972864,
"lng":116.314356
},
"address":"万泉河路68号紫金大厦一层北侧",
"province":"北京市",
"city":"北京市",
"area":"海淀区",
"street_id":"a3f21eeeddbb7e5d2fb17eff",
"telephone":"(010)82657120",
"detail":1,
"uid":"a3f21eeeddbb7e5d2fb17eff"
},
{
"name":"肯德基(双清餐厅)",
"location":{
"lat":40.00191,
"lng":116.341046
},
"address":"双清路88号华源世纪商务楼1-2层",
"province":"北京市",
"city":"北京市",
"area":"海淀区",
"street_id":"dbf4d6eedd42bf336fa3cc56",
"detail":1,
"uid":"dbf4d6eedd42bf336fa3cc56"
},
{
"name":"肯德基(永定路餐厅)",
"location":{
"lat":39.911554,
"lng":116.271439
},
"address":"永定路88号长银大厦一层",
"province":"北京市",
"city":"北京市",
"area":"海淀区",
"street_id":"97defcd20ea02286fea77842",
"telephone":"(010)58895620,(010)58895621",
"detail":1,
"uid":"97defcd20ea02286fea77842"
}
]
}
接口测试工具
浏览器可以装第三方插件做测试
postman软件
API接口写好后使用测试软件进行接口测试
本质:模拟发送http请求
Postman是一款接口调试工具,是一款免费的可视化软件,同时支持各种操作系统平台,是测试接口的首选工具。
Postman可以直接从官网:https://www.getpostman.com/downloads/下载获得,然后进行傻瓜式安装。
-
初始面板
![image]()
-
get请求
![image]()
-
post请求
![image]()
-
响应的数据
![image]()
![image]()
RESTful API规范
REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征性状态转移)。 它首次出现在2000年Roy Fielding的博士论文中。
RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中。
这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源。
事实上,我们可以使用任何一个框架都可以实现符合restful规范的API接口。
1.数据安全的保障:
- url链接一般采用https协议进行传输===>为了保证数据安全用https传输
- -https是什么:http+ssl/tsl
2.接口表现特征
- 接口中带api关键字
3.多版本共存
- 一个接口可以有多个版本===>url连接中标识数据版本* https://api.baidu.com/v1
- https://api.baidu.com/v2
注:url链接中的v1、v2就是不同数据版本的体现(只有在一种数据资源有多版本情况下)
- https://api.baidu.com/v2
4.数据就是资源
-
接口一般都是完成前后台数据的交互,交互的数据我们称之为资源
接口一般都是完成前后台数据的交互,交互的数据我们称之为资源- https://api.baidu.com/users
- https://api.baidu.com/books
- https://api.baidu.com/book
注:一般提倡用资源的复数形式,在url链接中奖励不要出现操作资源的动词特殊的接口可以出现动词,因为这些接口一般没有一个明确的资源,或是动词就是接口的核心含义 - https://api.baidu.com/place/search
- https://api.baidu.com/login
5.资源操作由请求方式决定(method)
- 操作资源一般都会涉及到增删改查,我们提供请求方式来标识增删改查动作
- https://api.baidu.com/books/ get请求:获取所有
- https://api.baidu.com/books/1 get请求:获取个体主键为1的
- https://api.baidu.com/books/1 post请求:新增
- https://api.baidu.com/books/1 put请求:整体修改主键为1
- https://api.baidu.com/books/1 patch请求:局部修改主键为1的
- https://api.baidu.com/books/1 delete请求:删除主键为1的
- 请求地址一样通过不一样的请求方式来决定做什么操作
6.过滤,通过在url上传参的形式传递搜索条件
- 获取所有人的数据 127.0.0.1/api/v1/person/ ===>get 请求
- 获取所有男人的数据 127.0.0.1/api/v1/person?gender=man
注: 通过url路径后?key=value的方式过滤 ===>get请求
7.响应状态码
- 1XX
- 请求正在处理
- 2XX
- 200:常规请求
- 201:创建成功
- 3XX
- 301:永久重定向
- 302:临时重定向
- 重定向通过各种方法将各种网络请求重新定个方向转到其它位置。比如购物的时候点击添加购物车本意是想添加购物车但跳转到登陆页面
- 4XX
- 403:请求权限不足
- 404:请求资源不存在
- 405:请求方式不存在
- 5XX
- 500:服务端异常
- 有些状态码在响应体中
8 错误处理,应返回错误信息,error当做key
- 响应体中需要带错误信息
9.返回结果,针对不同操作,服务器返回的结果应该符合规范
1.GET /collection:返回资源对象的列表(数组)
2.GET /collection/resource:返回单个资源对象
3.POST /collection:返回新生成的资源对象
4.PUT /collection/resource:返回完整的资源对象
5.PATCH /collection/resource:返回完整的资源对象
6.DELETE /collection/resource:返回一个空文档
- 获取所有:{"code":100,"msg":"成功",data[{"name":"tony"},{"name":"kiven"},{"name":"sdiwen"}]} 获取所有data中是数组套资源对象====>【{},{},{},{}】
- 获取单个数据{"code":100,"msg":"成功","data":{"name":"oscar"}} 获取单个直接返回当前资源对象
====>{} - 新增数据{"code":100,"msg":"成功","data":{"name":"老刘真帅"} 返回新增的资源对象====>{}
- 修改数据{"code":100,"msg":"成功","data":{"name":"老刘没我帅"} 返回修改的资源对象====>{}
- 删除数据{"code":100,"msg":"成功","data":{"name":"老刘没我帅"} ====> "空"
10.需要url请求的资源需要访问资源的请求链接,响应带链接

总结:不需要记住尽量记得多一点尽量往这方面靠即可
序列化和反序列化
- API接口开发最核心的一个过程序列化,序列化就是将数据转换格式,序列化分两个阶段:
- 序列化:把我们认识的数据转换成指定格式提供给别人
- 反序列化将别人提供的数据转换成我们需要的数据格式
djangorestframework快速使用
快速写出符合restful规范的接口







浙公网安备 33010602011771号