2012-12-02 5 views
17

Sto cercando di stabilire uno schema di best practice per i client ReST in Symfony 2, poiché questo è un lavoro molto comune per noi nella mia azienda, dove abbiamo le app Symfony sul frontend che parlano con Java backend su HTTP/ReST.Struttura client Symfony2 ReST

Il mio pensiero è questo, questi servizi riempiono il ruolo "Repository" in DDD per il particolare dominio in questione. In base alle convenzioni specificate da Doctrine, queste andrebbero in classi repository che restituiscono oggetti Entity.

Penso che la stessa convenzione possa funzionare anche qui, il client ReST implementa una classe di repository usando una libreria come Guzzle o semplicemente Straight Curl, non importa come, e quindi il codice lì fa le trasformazioni di base da XML o JSON da e indietro agli oggetti Entity per lo sviluppatore upstream da manipolare. Questo è coerente con gli schemi di altri casi d'uso di Symfony 2 e ha senso dal punto di vista del DDD.

Qualcuno vede un problema con questo o un modo migliore per farlo?

risposta

1

Mi piace l'approccio che hai delineato. Puoi pensare ai tuoi repository come anti-corruption layer, che isola il tuo codice cliente ReST dal tuo modello di dominio.

1

Questo funziona se si considerano correttamente anche tutti i livelli di memorizzazione nella cache coinvolti, per assicurarsi che il repository non effettui la cache oltre il TTL dell'oggetto REST che si recupera (come impostato da etags o expire headers o qualunque sia il server REST utilizzato).

Definitivamente il repository è il livello corretto, anche se forse in Symfony si desidera passare ad un livello più alto e considerarlo un gestore di entità, in quanto consentirebbe di astrarre le operazioni su quel livello, come persistere, rimuovere e svuotare.

1

Penso che si stia abusando dei repository in Symfony se si prevede di usarli in questo modo. Sarebbe meglio avere setter e getter nel proprio repository e l'elaborazione con guzzle/arricciatura da fare in un servizio.

Controller/Comando -> metodi di servizio -> Repository

Poi, a seconda delle esigenze, è possibile scrivere un Comando/regolatore per esporre i metodi in servizio in base alle esigenze.

2

seguito è il miglior articolo a che fare con lo sviluppo di API REST in Symfony2:
http://welcometothebundle.com/symfony2-rest-api-the-best-2013-way/

Il FOSRestBundle e NelmioApiDocBundle è una buona scelta per un veloce sviluppo resto api. Puoi visitare la documentazione ufficiale per sapere come installarla, configurarla e usarla.

+0

domanda è su REST struttura del codice cliente, non API –