【DRF】DRF框架的介绍和安装、RESTful规范(1)

一、为什么学习DRF

Django的未来与Web开发未来发展趋势紧密相关。Django这种基于MVT开发模式的传统框架,⾮常适合开发基于PC的传统⽹站,因为它同时包括了后端的开发(逻辑层,数据库层) 和前端的开发(如模板语⾔,样式)。

然⽽最近⼏年及未来⼏年更流⾏的开发模式肯定是前后端分离, Django也需要做出⾃⼰的改变来适应这种开发模式。现代⽹络应⽤Web APP或⼤型⽹站⼀般是⼀个后台,然后对应各种客户端(IOS, Android, 浏览器)。由于客户端的开发语⾔与后台的开发语⾔经常不⼀样,这时需要后台能够提供可以跨平台跨语⾔的⼀种标准的资源或数据(如json格式)供前后端沟通,这就是Web API(⽹络应⽤程序接⼝)的作⽤了

Django本身并不是为了开发符合REST规范的Web API⽽设计, 不过借助DjangoREST Framework (DRF)我们可以快速开发出优秀规范的Web API来。所以我们这⾥要感谢DRF,因为它,Django的应⽤前景更⼴了,减少了被淘汰的⻛险。

二、DRF介绍和安装

Django REST framework (DRF)是基于Django实现的⼀个RESTful⻛格API框架,能够帮助我们快速开发RESTful⻛格的API。
在这里插入图片描述

1、DRF安装

安装之前确定已安装django

pip install djangorestframework

如果想要获取⼀个图形化的⻚⾯来操作API,注册rest_framework

INSTALLED_APPS = [ 
	'django.contrib.admin', 
	'django.contrib.auth',
	'django.contrib.contenttypes',
	'django.contrib.sessions', 
	'django.contrib.messages', 
	'django.contrib.staticfiles', 
	'rest_framework', # 注册DRF应⽤ 
]

三、RESTful规范

1、协议、域名和版本

尽量使⽤https协议,使⽤专属域名来提供API服务,并在URL⾥标注api版本,如下所示:
https://api.example.com/v1
https://www.example.com/api/v1

另⼀种⽅法设置版本号

Accept: vnd.example-com.foo+json; version=1.0
Accept: vnd.example-com.foo+json; version=1.1
Accept: vnd.example-com.foo+json; version=1.2

2、URI(统⼀资源标识符)

在RESTful架构中,每个⽹址代表⼀种资源(resource),这个⽹络地址就是URI(uniform resource identifier), 有时也被称为URL(uniform resource locator)。因为URI对应⼀种资源,所以⾥⾯不能有动词,只能有名词。⼀般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使⽤复数。

https://api.example.com/v1/users
⽤户列表资源地址

https://api.example.com/v1/users/{id}
⽤户id=5资源。注意:这⾥是users/5,⽽不是user/5
API中的名词应该使⽤复数。⽆论⼦资源或者所有资源

https://api.example.com/v1/users/{id}/articles
⽤户id=5发表的⽂章列表

3、HTTP动词

对于资源的具体操作类型,由HTTP动词表示。
常⽤的HTTP动词有下⾯四个(括号⾥是对应的SQL命令)。

GET(SELECT):从服务器取出资源(⼀项或多项)。
POST(CREATE):在服务器新建⼀个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
DELETE(DELETE):从服务器删除资源。

还有三个不常⽤的HTTP动词。

PATCH(UPDATE):在服务器更新(更新)资源(客户端提供改变的属性)。
HEAD:获取资源的元数据。
OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

4、过滤信息(Filtering)

如果记录数量很多,服务器不可能都将它们返回给⽤户。API应该提供参数,过滤返回结果。
下⾯是⼀些常⻅的参数。
?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第⼏⻚,以及每⻚的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件

参数的设计允许存在冗余,即允许API路径和URL参数偶尔有重复。⽐如,GET/channels/ID/categories 与 GET /categories?channel_id=ID 的含义是相同的。

5、状态码(Status Codes)

服务器向⽤户返回的状态码和提示信息,常⻅的有以下⼀些(⽅括号中是该状态码对应的HTTP动词)。
200 OK - [GET]:服务器成功返回⽤户请求的数据
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 - [*]:服务器发⽣错误,⽤户将⽆法判断发出的请求是否成功。

6、错误处理(Error handling)

如果状态码是4xx,服务器就应该向⽤户返回出错信息。⼀般来说,返回的信息中将error作为键名,出错信息作为键值即可。

{ error: "Invalid API key"}

7、返回结果

针对不同操作,服务器向⽤户返回的结果应该符合以下规范。
GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新⽣成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回⼀个空⽂档

8、其他

服务器返回的数据格式,应该尽量使⽤JSON,避免使⽤XML。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值