2014-10-04 16 views
13

Ho fatto delle ricerche e ho notato che in molti esempi le app di Symfony2/AngularJS sono combinate tra frontend e backend; per esempio, le viste usano Twig.Applicazione pagina singola - Frontend indipendente dal backend?

Ho sempre pensato che fosse possibile (e pratica comune) creare frontend e backend separatamente e unirli semplicemente tramite API. In tal caso, se voglio cambiare un framework PHP, potrò farlo senza problemi e sarà sufficiente per mantenere l'API.

Quindi quali sono le migliori pratiche per farlo? Sarebbe bello se tu potessi spiegarmelo e ancora di più se mi dai un link a un buon esempio su github o qualcosa del genere.

+0

Lei ha ragione, il tuo index dovrebbe essere l'unico html che è stato generato/interpretato dal server. Il resto del tuo html, css, js è statico e i tuoi dati endpoint vengono semplicemente passati come JSON. – Dylan

+0

@Dylan puoi anche evitare di restituire l'indice. Vedere la mia risposta – Qualcuno

+0

Anche Symfony2/AngularJS ha alcuni avvertimenti che potrebbero confondere la tua comprensione. Cose come Twig e angular si scontreranno con la sintassi della variabile {{}}. Quindi ci sono molti tutorial sul problema e non si tratta esattamente di best practice o altro. – Dylan

risposta

14

Abbiamo sviluppato alcuni progetti utilizzando lo stesso approccio. Non solo penso che non abbia alcun "effetto collaterale", ma anche la soluzione è molto elegante. Generalmente creiamo il backend in Node.js, ed è solo un server API (non necessariamente interamente conforme a REST). Creiamo quindi un'altra applicazione web separata per il frontend, scritta interamente in HTML5/JavaScript (con o senza Angular.js). Il server API mai restituisce qualsiasi HTML, solo JSON! Neanche una struttura di indice.

Ci sono un sacco di vantaggi:

  • il codice è molto pulito ed elegante. La comunicazione tra frontend e backend segue metodi standardizzati. Il server espone alcune API e il client può utilizzarle liberamente.
  • Rende più semplice avere squadre diverse per il frontend e il back-end, e possono lavorare abbastanza liberamente senza interferire l'uno con l'altro. I progettisti, che di solito hanno capacità limitate di codifica, apprezzano anche questo.
  • Il frontend è solo un'app HTML5 statica, quindi può (e spesso lo facevamo) essere facilmente ospitato su un CDN. Ciò significa che i tuoi server non dovranno mai preoccuparsi dei contenuti statici e il loro carico si riduce, risparmiando denaro. Anche gli utenti sono più felici, perché i CDN sono in genere molto veloci per loro.

Alcuni indizi che posso dare, sulla base della nostra esperienza:

  • Il problema più grande è con l'autenticazione degli utenti. Non è particolarmente complicato, ma potresti voler implementare l'autenticazione usando per esempio protocolli come OAuth 2.0 per uso interno. Pertanto, l'app frontend fungerà da client OAuth e otterrà un token di autenticazione dal back-end. Si consiglia inoltre di prendere in considerazione lo spostamento del server di autenticazione (con OAuth) su un'altra risorsa separata dal server API.
  • Se si ospita la webapp su un nome host diverso (ad esempio un CDN) potrebbe essere necessario gestire CORS e forse JSONP.
  • La lingua in cui scrivi il back-end non è molto importante. Lo abbiamo fatto in PHP (incluso Laravel), anche se abbiamo ottenuto i migliori risultati usando Node.js. Per Nodo.js, abbiamo pubblicato il nostro boilerplate on GitHub, sulla base di RestifyJS

ho chiesto alcune domande in passato si può essere interessati a:

+0

Grazie, leggerò quello che mi dai. Ma ho ancora una domanda. Esistono motivazioni alla base della combinazione di Symfony2 e AngularJS? Forse se qualcuno vuole usare Angular solo in alcune parti dell'applicazione come la paginazione o l'aggiunta di commenti? – tdudzik

+0

Angular è più potente per creare intere applicazioni Web basate su MVC. Non vedo perché dovresti limitarlo a componenti specifici. Ad ogni modo, la scelta è vostra :) – Qualcuno

+0

con Symfony2 è super facile costruire un'API e implementarla in AngularJS, quindi la combinazione di questi due framework mostri è davvero molto razionale, ma limitando l'angolare a componenti specifici non lo è, tu d svolgere il lavoro in jQuery molto più velocemente. – dimention

Problemi correlati