Django几种API框架的比较(piston、tastypie、Django REST framework)
最近老蔡在写一个RESTful的应用的服务端,于是分析、比较了一下Django的几个知名一点的REST框架。
django-piston太老,不维护了,不讨论。
django-tastypie
优点:
- 可以直接利用已有的django的form类来验证数据,二次开发时使用它重用率会高很多
- 灵活,自定义url比较简单方便
- 文档详尽
其他:关于验证和权限,很纠结的两个类名:Authentication和Authorization,瞧他俩长的多像啊。。。
当然,Authentication关心当前用户是谁,也就是验证账号登陆状态,而Authorization关心当前用户能做什么,也就是验证账号权限,区分的还是很合理的,但是一般老蔡更喜欢用Permissions这样的词来表示这里的Authorization,避免眼残的情况发生。
但是这个过程中,Resource流程中登陆先于权限,并且没有登陆的话,会直接返回401。也就是说,用非自定义的Resource、Authentication、Authorization,没有登陆的时候,就会返回401,而无法匿名访问哪怕是get这样的只读属性,没有地方设置忽略某种方法的Authentication,除非自定义Authentication。
Django REST framework
优点:
- 承袭django的结构,熟悉django就上手快
- 直接提供(tastypie可以通过tastypie_swagger实现类似功能,但不是直接支持)Browsable API,易用性很高
其他:一般使用还是很方便的,文档齐全;但是深入一些就没有那么齐全的文档了。
比如想给一个ModelSerializer加一个附加的参数(比如密码验证),会很麻烦,要么自己从APIView封装,要么写两个serializer,自己区分get和post。