2012-09-27 20 views
8

Attualmente sto sviluppando un'applicazione Web, che fa molto affidamento su client mobili e desktop che consultano il server Web per informazioni. Questo può essere fatto bene rendendo disponibile un'API RESTful per gestirlo. Quindi la mia idea è di avere un'applicazione che funga da "piattaforma" che gestisce tutte le reali informazioni di business logic e database dietro le quinte.Sito Web Symfony2 e API RESTful

Il mio piano è di rendere la piattaforma utilizzando i meccanismi di autenticazione symfony2 e OAuth 2.0, in combinazione con i servizi web RESTful.

Ora il mio vero dilemma arriva sul componente del sito web. Idealmente mi piacerebbe pensare al sito web come ad un altro cliente che chiede informazioni a questa piattaforma REST e lo separa completamente dalla piattaforma stessa.

Per renderlo un po 'più chiaro, diciamo che stiamo creando un blog con questa architettura, quindi avremmo una "piattaforma/back-end" che fornisce un servizio di assistenza per elencare gli articoli, ad esempio:/articles/5 . Questo sul backend e con symfony2/doctrine significa che l'app ha una classe di modello Article, e questi possono essere richiesti dal DB. Una semplice query di controller per l'articolo numero 5 restituisce tutte le informazioni in formato JSON.

Ora il sito web su questo esempio, potrebbe semplicemente fare la cosa facile e avere anche un'entità articolo e basta interrogare direttamente il database, ma penso che sarebbe più pulito se potesse parlare alla piattaforma attraverso il suo REST api e utilizzare tali informazioni come "back-end" per le entità.

Quindi la vera domanda sarebbe, c'è comunque un modo per supportare questo tipo di progettazione usando symfony2? Le entità si affidano a una API REST per le operazioni CRUD? O sto semplicemente migliorando la piattaforma/il sito web e condividendo un "CoreBundle" con tutte le entità generiche?

+0

Avete trovato una soluzione per questo? Sarei interessato. – sprain

+0

In realtà l'ho fatto. Ho finito con l'idea che il sito Web fosse un altro cliente e richiedesse i dati dalla piattaforma attraverso richieste http. Sto usando guzzle (con il mio GuzzleBundle per symfony2) per fare le richieste e deserializzare automaticamente le risposte JSON in entità. Sul lato web ho effettivamente delle entità duplicate ma senza alcuna mappatura della dottrina, e in alcuni casi i dati reali hanno finito per essere diversi tra l'entità aziendale reale nel back-end rispetto ai dati necessari per il front-end. Se ti è utile, il mio pacchetto di guzzle è https://github.com/xamado/guzzle-bundle – Xavier

+0

Grazie! Quindi hai effettivamente due richieste per ogni richiesta sul tuo sito web? Questo è qualcosa che vorrei evitare .. – sprain

risposta

1

Non c'è niente in Symfony che ti impedisca di farlo.

Sul lato client è possibile utilizzare Backbone.js o Spine.js.

+0

Ho dimenticato di menzionare che intendevo che il sito stesso fosse anche un progetto symfony2, ed è qui che la mia domanda entra in gioco riguardo a come gestire un sito web symfony2 da cui provengono le entità una API REST e non, diciamo, una dottrina. – Xavier