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?