【发布时间】:2014-05-13 00:49:29
【问题描述】:
我们使用 Django 构建 web-app 后端,为 Ember 应用提供 RESTful API。
所以(进化上)我们从以下简单结构开始:
project root
|
|-app1 / models.py .... no views.py
|
|-app2 / models.py .... no views.py
|
|-app3 / models.py .... no views.py
|
\- restapi - provides REST API for app*: huge views.py, huge serializers.py, huge test.py
这很容易使用,尤其是 DRF 的可浏览视图:
@api_view(['GET'])
def api_root(request, format=None):
return Response(
{
'users': reverse('current-user-detail', request=request),
'interfacesettings': reverse('interface-settings', request=request),
............................................................
'preferences': reverse('preferences', request=request),
}
)
很快我们就有足够多的模型/API 让我们的 restapi.app 变得过于复杂和混乱,我们开始考虑使用更合乎逻辑的东西:
project root
|
|-app1 / models.py .... views.py, serializers.py, tests.py
|
|-app2 / models.py .... views.py, serializers.py, tests.py
|
|-app3 / models.py .... views.py, serializers.py, tests.py
|
\- we do not need rest api anymore (but where will we put our api_root?)
另一方面,我们现在将所有复杂的测试(涉及很少的模型)放在一个方便的地方。而且我们重用序列化器的功能很多。我们有一个 api_root。所以我们可能会有这样的事情:
project root
|
|-app1 / models.py .... views.py (app1 API), serializers.py, tests.py
|
|-app2 / models.py .... views.py (app2 API), serializers.py, tests.py
|
|-app3 / models.py .... views.py (app3 API), serializers.py, tests.py
|
\- restapi - views.py (api_root), tests.py for complicated tests and serializers.py for common functions
哪种方法更好?这里有哪些常见的最佳实践? 有没有开放的项目我们可以看看?
【问题讨论】:
标签: django django-rest-framework django-testing