Separazione del server Web e dell'API REST stateless

2

Attualmente, ho un singolo server Node che fornisce sia (a) percorsi API senza stato che restituiscono JSON, sia (b) percorsi web basati su sessioni. Le mie rotte API e le rotte web hanno iniziato a condividere un sacco di codice, e mi chiedo se e come posso evitarlo. Vorrei separare la funzionalità in due server in modo tale che l'API e il server Web possano essere ridimensionati in modo indipendente.

Come esempio di condivisione del codice, sul lato API, ho definito un percorso example.com/api/person/:id/ che restituisce un profilo utente come JSON. Quando la richiesta GET arriva per quel percorso, il server API chiama una funzione api.getPerson(req, res) , che internamente chiama db.getPerson(id) per cercare una persona nel database. L'API è accessibile da un'applicazione Javascript a pagina singola e presto da un'app mobile e funziona perfettamente.

Ora ho anche bisogno di creare pagine HTML generate dal server per visualizzare i profili utente. Così ho creato una rotta web (ad esempio example.com/person/:id) che utilizza la stessa funzione db.getPerson(id) per interrogare il database.

Funziona, ma tutte le rotte (API e web) e sono servite da un singolo server e condividono del codice. Questo mi impedisce di ridimensionare autonomamente il servizio API e il servizio web. Ad esempio, se l'utilizzo dei dispositivi mobili è decollato, potrebbe essere necessario aggiungere un server API stateless aggiuntivo, ma non desidero duplicare la funzionalità del server Web basata su sessione che è attualmente in bundle con esso.

Una possibile soluzione potrebbe essere quella di separare il server esistente in un server Web e un server API. Quindi il server web accederà ai dati tramite l'API come qualsiasi altro client.

Questa configurazione è ragionevole?

Se è così, non sono esattamente sicuro su come procedere. È prevista la funzionalità integrata del nodo (http.get? Http.request?) Consigliata oppure esistono altre soluzioni da considerare?

    
posta Lorenz Forvang 14.01.2015 - 00:44
fonte

0 risposte

Leggi altre domande sui tag