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