API e página principal como dois processos separados

1

SITUAÇÃO

Eu criei uma API REST para meu aplicativo para dispositivos móveis e agora quero criar um website. API até agora é muito, muito simples, apenas para alguns pedidos como 'obter lista de conteúdos', 'atualizar algum campo no banco de dados' etc. Mas agora, eu quero criar um site que irá usar o mesmo banco de dados, é claro. Eu não acho que esta API será útil no projeto do site.

PERGUNTA

É melhor manter a API e o site separadamente, em duas instâncias de gunicornes diferentes, ou é melhor mesclá-lo? Por exemplo, API em api.example.com com endereço 127.0.0.1:8001 e website em example.com com endereço 127.0.0.1:8002 e, claro, em duas configurações diferentes de servidor nginx (2 arquivos em sites disponíveis / ativados se você ainda não sabe o que eu significa: P)? Ou não importa o desempenho com o tratamento de solicitações e é melhor fazer um projeto com link example.com/api/... ?

    
por brylcio16 24.10.2014 / 17:22

1 resposta

0

Para produção, recomendo manter os aplicativos separados, como você sugere (em dois sites nginx diferentes).

Divida seu projeto Django em aplicativos: ie. 'core', 'api', 'web'. Dessa forma, você pode compartilhar o aplicativo que contém os modelos e a lógica 'core' e fazer com que as duas outras aplicações 'api' e 'web' reutilizem esse código.

Porque, na verdade, você está descrevendo dois serviços (API e web), você pode facilmente criar dois settings.py e wsgi diferentes para o Django, cada um deles incluindo os aplicativos apropriados. Essa é uma abordagem comum: cada aplicativo inclui e expõe apenas o código de que precisa. Ter nomes de domínio e serviços separados permitiria uma distribuição mais fácil e melhor à medida que o site cresce. Além disso, permite um ajuste mais fácil de cada configuração de aplicativo (configurações de log, middleware, etc.).

Se o seu aplicativo não precisar dar suporte a tantas solicitações, ficarei feliz em manter um único settings.py e usar URLs para direcionar solicitações para um aplicativo ou outro. Você pode fazer isso para o desenvolvimento também.

Se você deseja incluir uma ou outras URLs dependendo das configurações, use algo como:

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

O exemplo acima é apenas um exemplo, o ponto é que você pode construir seus padrões de URL condicionalmente ou, por exemplo, usar o operador + para adicionar mais padrões a eles. Mais informações no link .

    
por 24.10.2014 / 17:43