元旦假期对 2022 年进行了一次回顾与总结,发现最近一年公众号基本上是处于停更的状态,今年希望有所改善吧。
刚好最近一段时间,在技术上学习了一些新东西,非常难得。最近在做API接口重构改造,有一点点收获,所以打算写一下。
团队API写法及文档出现了“百家争鸣“的乱象,直接影响到代码质量、交接成本、联调进度、及bug的review的难度。所以引用 JSONAPI 交互规范,优化前后端 crud 等简单功能的开发对原有 api 进行重构改造,后端是引入了新的第三方库 django-rest-framework-json-api。
它是依赖于 Django REST framework ,在其基础上进行了参数结构调整等功能封装,使用起来和 Django REST framework 很像,变化主要体现在
一、直观使用感受
1.请求类型变成了
application/vnd.api+json
2.请求参数
/trip/?limit=10
变成了
/trip/?page[limit]=10
3. 返回结果,多了其他信息,比如 type、attributes、relationships
4.body 的请求参数也有变化
二、代码层面:
在 settings 上按照文档设置 rest_framework_json_api 相关属性
序列化验证器直接替换为它的 serializers
其他写法和 django-rest-framework 用法基本上一样。
三、重写部分源码
为了减少之前API的改动量,这边也对 django-rest-framework-json-api 部分源码修改,包括控制参数返回的 JSONRenderer、swagger-ui 文档生成等部分进行了重写
四、其他
之前一直以为 Django 不支持跨库,后来了解到,只需要在模型的元类添加 db_table 属性,写上数据库和表名就行,值得注意的是必须要有【`】