Я создал REST API для своего мобильного приложения и теперь хочу создать веб-сайт. API пока что очень-очень простой, всего для пары запросов, таких как «получить список содержимого», «обновить какое-либо поле в базе данных» и т. Д. Но теперь я хочу создать веб-сайт, который, конечно же, будет использовать ту же базу данных. Не думаю, что этот API пригодится в проекте сайта.
Лучше хранить API и сайт отдельно, на двух разных экземплярах Gunicorn, или лучше их объединить? Например API на api.example.com
с адресом 127.0.0.1:8001
и сайт на example.com
с адресом 127.0.0.1:8002
и, конечно же, на двух разных конфигурациях сервера nginx (2 файла на сайтах доступны / включены, если вы все еще не понимаете, о чем я: P)? Или не имеет значения производительность при обработке запросов и лучше делать один проект со ссылкой example.com/api/...
?
Для производства я бы рекомендовал хранить приложения отдельно, как вы предлагаете (на двух разных сайтах nginx).
Разделите ваш проект Django на приложения: т.е. "ядро", "api", "сеть". Таким образом, вы можете поделиться приложением, содержащим модели и «ядро» логики, и позволить двум другим приложениям «api» и «web» повторно использовать этот код.
Поскольку на самом деле вы описываете две службы (API и веб), вы можете легко создать два разных файла settings.py и wsgi для Django, каждый из которых включает соответствующие приложения. Это общий подход: каждое приложение включает и предоставляет только тот код, который ему нужен. Наличие отдельных доменных имен и услуг позволит упростить и улучшить распространение по мере роста сайта. Кроме того, это позволяет упростить тонкую настройку каждой конфигурации приложения (параметры ведения журнала, промежуточное ПО и т. Д.).
Если вашему приложению не требуется поддерживать такое количество запросов, я был бы счастлив сохранить один файл 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/ .