Metodi per separare front e back-end con stack completo javascript?

21

Supponiamo di avere un front-end che è principalmente un'applicazione a pagina singola scritta usando angolare, grugnito e pergolato. E supponiamo di avere un back-end, che è per lo più solo un'API REST posta sopra un ORM, che memorizza / recupera oggetti da un database, usando cose come grunt, express e sequelize.

L'applicazione angolare fa tutte le cose visive che l'utente vede, ma lo fa essendo una GUI rispetto ai servizi forniti dal back-end.

Sarebbe auspicabile separare questi in due diversi codebase, per permettere sviluppo indipendente, versioning, integrazione continua, spinta allo sviluppo, ecc.

La mia domanda è: quali metodi sono disponibili per farlo in modo pulito? Sono consigliate le migliori pratiche per lo javascript completo?

L'opzione n. 1 sembra essere un monolite, cioè "non separarli". Il pro è che la catena di costruzione è semplice, e tutto è in un posto - ma sembrano esserci molti svantaggi; più difficile alla versione indipendentemente, un fronte rotto significa uno schieramento non schierabile, e così via.

L'opzione # 2 sembra essere un quasi-monolite, in cui la catena di build front-end risulta nella scrittura di un mucchio di file sul back-end. La directory dist sul front-end si riferirebbe ad alcune directory sul back-end, quindi essenzialmente quando il front-end riduce, uglifies, ecc, finisce la pubblicazione sul back-end, che esegue tutto.

L'opzione n. 3 sembra completa separazione: front-end e back-end eseguono ciascuno i propri server su porte diverse e sono progetti completamente separati. Lo svantaggio sembra che debbano essere configurati per conoscere le rispettive porte; il back-end deve consentire CORS dal front-end e il front-end deve sapere dove si prevede che tutti questi endpoint siano.

L'opzione # 4 potrebbe essere quella di usare qualcosa come la docker-compose per assemblare l'intero insieme.

Sono sicuro che ci sono altre opzioni. Qual è la migliore pratica consigliata?

    
posta FrobberOfBits 27.12.2015 - 03:24
fonte

2 risposte

14

Si tratta di un'applicazione front-end, back-end, con un'interfaccia REST in mezzo. Hai già una separazione completa.

Il mio voto è per l'opzione n. 3. Sembri preoccupato per la configurazione, ma questo è un po 'il punto. La configurazione consente di avere una separazione completa senza richiedere associazioni di codici strettamente accoppiate. Se sei preoccupato per CORS, metti tutto su un dominio. Se devi avere CORS, il modo migliore per gestirlo è una configurazione.

Ma qui non esiste una "migliore pratica". La migliore pratica è quella che soddisferà al meglio le tue esigenze specifiche.

    
risposta data 27.12.2015 - 03:43
fonte
4

Sì, dovresti separare i due e considerare l'app di front-end come un'app di terze parti - potresti ad esempio aggiungere un altro client, un'app mobile e se il primo client è stato costruito in questo modo la tua vita sarà più facile.

L'uso di contenitori docker o di un altro sistema di distribuzione riguarda principalmente il back-end, poiché il front-end dell'app è solo risorse statiche che devono essere risolte. Puoi ospitare queste risorse in modo statico nel tuo server o da qualche altra parte come un cloud come il cloudfront.

Evitare cors ti farà risparmiare una piccola configurazione, ma come menzionato nella risposta sopra, è una specie di punto. Usando cors (e token auth) preparerai meglio il tuo back-end anche per altri client.

Modifica: per quanto riguarda le migliori pratiche dello stack completo, direi semplicemente che è coerente. Se usi le promesse (e dovresti), fallo da entrambe le parti. Mantieni lo stesso stile e la stessa formattazione, usa le stesse librerie di test (ove possibile), ecc.

    
risposta data 27.12.2015 - 18:02
fonte

Leggi altre domande sui tag