API 和主页作为两个独立的进程

API 和主页作为两个独立的进程

情况

我为我的移动应用程序创建了一个 REST API,现在我想创建一个网站。到目前为止,API 非常简单,只针对几个请求,例如“获取内容列表”、“更新数据库中的某些字段”等。但现在,我想创建一个当然会使用相同数据库的网站。我不认为这个 API 在网站项目中有用。

问题

最好将 API 和网站分开放在两个不同的 gunicorn 实例上,还是最好将它们合并?例如,API 和api.example.com地址放在一起127.0.0.1:8001,网站和example.com地址放在一起127.0.0.1:8002,当然还要在两个不同的 nginx 服务器配置上(如果您仍然不明白我的意思,请在 sites-available/enabled 中使用 2 个文件 :P)?或者处理请求的性能无关紧要,最好用链接做一个项目example.com/api/...

答案1

对于生产,我建议按照您的建议将应用程序分开(在两个不同的 nginx 站点中)。

将您的 Django 项目划分为应用程序:即“core”、“api”、“web”。这样,您可以共享包含模型和逻辑“core”的应用程序,并让其他两个应用程序“api”和“web”重用该代码。

因为实际上您描述的是两个服务(API 和 Web),所以您可以轻松地为 Django 创建两个不同的 settings.py 和 wsgi,每个都包含相应的应用程序。这是一种常见的方法:每个应用程序仅包含和公开其所需的代码。随着网站的发展,拥有单独的域名和服务将使分发更加轻松和更好。此外,它还可以更轻松地微调每个应用程序配置(日志记录设置、中间件等)。

如果您的应用程序不需要支持如此多的请求,我很乐意保留单个 settings.py 并仅使用 URL 将请求定向到一个应用程序或另一个应用程序。您也可以在开发中这样做。

如果您希望根据设置包含一个或其他 URL,请使用以下命令:

# Your generic URL patterns
urlpatterns = patterns('',   
    #(r'^static/(?P<path>.*)$', 'django.views.static.serve'),
    ...
)

if settings.ENABLE_API:
    urlpatterns += patterns('', 
        url(r'^', include('myapi.urls')),
    ) 

if settings.ENABLE_WEB:    
    urlpatterns += patterns('', 
        url(r'^', include('web.urls')),
        #url(r'^admin/', include(admin.site.urls)),
    ) 

以上只是一个例子,重点是您可以有条件地构建 URL 模式,或者例如使用 + 运算符向其中添加更多模式。更多信息请访问https://docs.djangoproject.com/en/dev/topics/http/urls/

相关内容