API et page principale en deux process séparés

SITUATION

J'ai créé une API REST pour mon application mobile et je souhaite maintenant créer un site web. L'API jusqu'à présent est très très simple, juste pour quelques requests comme «get une list de contenu», «mettre à jour certains champs dans la database», etc. Mais maintenant, je souhaite créer un site Web qui utilisera la même database bien sur. Je ne pense pas que cette API sera utile dans le projet du site.

QUESTION

Il est préférable de garder l'API et le site Web séparément, sur deux instances de pistolet différentes, ou il est préférable de la merge? Par exemple, l'API sur api.example.com avec l'adresse 127.0.0.1:8001 et le site Web sur example.com avec l'adresse 127.0.0.1:8002 et bien sûr sur deux configurations de server nginx différentes (2 files dans les sites disponibles / activés si vous continuez Je ne sais pas ce que je veux dire: P)? Ou n'a pas d'importance sur les performances avec les requests de gestion et il vaut mieux faire un projet avec link example.com/api/... ?

Pour la production, je recommand de garder les applications séparées comme vous le suggérez (dans deux sites nginx différents).

Divisez votre projet Django dans les applications: c.-à-d. 'core', 'api', 'web'. De cette façon, vous pouvez partager l'application contenant les templates et le «kernel» logique, et les autres applications 'api' et 'web' réutilisent ce code.

Parce qu'en fait, vous décrivez deux services (API et Web), vous pouvez facilement créer deux configurations différentes.py et wsgi pour Django, chacune d'entre elles incluant les applications appropriées. C'est une approche commune: chaque application inclut et n'expose que le code dont elle a besoin. L'existence de noms de domaine et de services distincts permettrait une dissortingbution plus facile et meilleure à mesure que le site augmentera. En outre, il permet un réglage plus précis de chaque configuration d'application (parameters de journalisation, middleware, etc.).

Si votre application n'a pas besoin de prendre en charge tant de requests, je serais heureux de conserver un seul paramètre.py et simplement d'utiliser des URL pour diriger des requests vers une application ou une autre. Vous pouvez également le faire pour le développement.

Si vous souhaitez inclure une ou plusieurs URL en fonction des parameters, utilisez quelque chose comme:

 # 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)), ) 

Ce qui précède n'est qu'un exemple, il est possible que vous puissiez build vos templates d'URL sous condition ou, par exemple, utiliser l'opérateur + pour y append d'autres. Plus d'informations sur https://docs.djangoproject.com/fr/dev/topics/http/urls/ .