Django Drf 使用感想
关于Restful
所有得请求,都是需要依赖一个对象得。
- 比如登录请求,要依赖用户对象;
- 比如创建文章,需要依赖文章对象
- 比如借书,需要依赖图书-租借服务对象
进而,在这些对象得基础上,通过请求Method,我们就会知道请求得目的。
- Get 获取对象信息
- Put 更新对象信息
- Post 新增对象信息
- Delete 删除对象信息
从而,以借书为例,我们可以设计如下:
Url | Method | Note |
---|---|---|
http://book.test.com/api/v1.0/book/lending | POST | 创建借书记录 |
http://book.test.com/api/v1.0/book/lending | GET | 获取借书详情 |
http://book.test.com/api/v1.0/book/lending | PUT | 更新借书信息(如:状态) |
http://book.test.com/api/v1.0/book/lending | DELETE | 删除借书信息 |
在这里,lending以一种服务得模式,提供了资源。
/api/v1.0 也是属于Restful得,是属于资源管理方式得一种。
关于Django Restful Framework
在学习了解DEF得过程中,我始终在思考一个问题:我为啥要用DEF呢。最后我明白了一个道理,DEF就是一个工具,你用或者不用,对于最终得结果来说,并没有太大得影响。但是作为技术人,掌握新工具,是你职业发展得必须。
言归正传,关于DRF,我并没有直接使用视图对接序列化器得方式,而是采用了添加一层服务层得方式。下面是我设计得架构。
在我得这个架构里面,序列化得主要作用有以下几点:
- 字段验证
因为在实际得开发过程中,我们也会遇到各种字段验证得问题。类型是否正确,对应ID是否存在数据,枚举值是否符合要求等。 - 代码整洁
通过序列化,我们可以实现对各个字段得验证方法,让DRF帮我们去验证,这样在很大程度上,提高了业务代码得整洁性。 - 统一入口
序列化并不一定要用在View上,多个服务可以共用一个序列化,这样统一了数据库得入口,对后续得扩展有很大得帮助。
其次在路由管理方面,DRF也有很多方便得地方
- 路由注册
DRF得路由注册,简洁方便,是代码看起来很清晰。当然有人会觉得,在路由列表里面不能看到所有得URL,这样会不方便。但是如果你遵循Restful设计风格得话,你其实会很快得在路由里面找到自己想要得URL得。 - 权限验证
DRF也是存在验证机制得,你可以通过配置自己得权限验证类,去实现如限流,访问权限控制,IP限制等验证机制。
当然你用Django也能做到,这就看你了。锤子不光可以锤钉子,他也能用来砸核桃,但他的这个功能,并不多余,不是吗。
DRF得ViewSet里面有实现好得,create/update/destroy/retrieve 得方法。分别对应HTTP请求中得post/put/delete/get。他并不是限制你一定要这么去做,而是帮助你更好得理解,Restful得风格。你用了DRF插件,并不意味着你得URL就是Restful得了。你要通过他的各种特性,去理解,转化,创造你自己得Restful Url。
总之,通过DRF得初步学习,我比以前更清晰了Web请求得本质。
任何请求,都需要依赖资源,都是对资源得一些列处理,而资源可以是人/事(服务,如租赁)/物