Django REST framework
以下为了撰写方便,直接把Django REST framework 简称为DRF。
整个DRF我觉得设计得满完整,甚至也有plugin的生态系,如果找不到合适的,也可以自己撰写DRF的plugin。刚开始上手的话有份官方的Tutorial可看:Quickstart - Django REST framework,建议把整份tutorial都念完会比较了解整个framework组件之间的关系,毕竟篇幅也不多,加上Quickstart也就8个页面而已。剩下的等实际编写嗲吗时遇到不太懂的时候,再去查询官网上详细一点的文件就行了,有时候真的文件说的不够清楚的话可能还是得去看一下代码。
这边记录一下几个我自己在阅读文件的时候花比较多时间理解的部份:
ViewSet可以使用的参数不太清楚,看文件又看不出个所以然,所以就跑去看代码了。花了一点时间熟悉之后,我在后续使用上遇到最大的问题是在效率,因为我要去查询的资料总量满大的,所以查询常常都会等很久。还有DRF 预设的pagination 部份也没有处理得很好,查了一下发现也有很多人遇到,所以有满多文章在讲这件事的,这里列出我自己觉得比较有用的:
queryset.prefech_realted等等。APIView其他都没用到,还是推荐使用DRF,比起你自己用Django撰写的API还是好上许多。但这几篇文章其实都有点旧了,大部份都是2015 年的,所以可能不一定符合现在的状况,不确定DRF 在效能方面改进了多少就是。
另外,DRF也有设计一些可以拿来做测试的函式,列在官方的这篇文章里头:Testing - Django REST framework
DRF Docs 主要功能就是可以根据你在Django REST framework 所使用的View function 直接生出API 文件,有要额外补充的也可以写在View function 的docstring 里头,DRF Docs 会帮你呈现出来,这样就不需要为了API 额外遍写文件,只要docstring 写得够清楚就行,可以节省开发上的时间,也可以让代码更容易被理解。
当时会fork GitHub - manosim/django-rest-framework-docs: Document Web APIs made with Django Rest Framework出来改的主要原因是要改首页的标题。
但实际使用过发现有个需求,就是我想在docstring直接写markdown,觉得应该也有人有这样的需求,所以找了一下。发现有个PR就是在做这件事,不过还没被merge:Added markdown support for endpoint docstrings by mikeengland · Pull Request #117 · manosim/django-rest-framework-docs · GitHub,于是就把这个PR merge进来使用,基本上没啥太大的问题。
撰写这篇文章的时候去追了一下进度,发现已经有另外一个支持markdown的PR被merge了:Add optional markdown for docstrings by rainyday · Pull Request #127 · manosim/django-rest-framework-docs · GitHub,所以现在的DRF Docs应该是有正式支援在docstring可以写markdown这件事,但这个部份我自己没使用过就是。
如果熟Django的人真的可以很快用DRF + DRF Docs弄出一个可以做帐号权限管理的REST API网站,而且因为用上了DRF Docs,所以不会出现程式码和文件不一致的状况。当时撰写完整个网站我也不过花了53 commits 1,806 ++ 761 --,为期大概一个月,学到了没碰过的新东西,成功尝试了Google App Engine Flexible Environment,期间当然也有做其他事。
但如果不考虑快速完成而是考虑效率的话,我大概就不太推荐DRF,虽然不确定目前效能改善到什么地步,如果还是要使用的话可能就要在Database 或架构方面多下点功夫。
因为开发完这网站之后我就没再碰DRF 了,所以这篇文章可能会显得有点过时些,但可以当个参考,毕竟这篇主要目的是纪录给我自己知道到底我把时间花在哪里了。
技术文这种东西真的不太能囤积在草稿啊,能发就要赶快发,不然真的很容易过时。如果是一些跟人比较有关系的文章则大概很难过时,看看技术的长青书基本上都是在讲人的态度或是做事的方法与原则。其实也在思考以后写的一些技术文能否能朝这个方向去多纪录一些。