Qual è il modo di creare un'API interna

1

Ho un progetto Symfony.

Voglio rendere questo progetto basato su API, ma anche con un'interfaccia utente Web.

Quindi, ho 2 pacchetti, ApplicationBundle e WebUiBundle .

In Pacchetto applicazioni, ho application , domain e infrastructure (livelli?), dove application ha l'API pubblica (livello di presentazione).

Ora, ho bisogno di accedere a un'API da WebUiBundle , ma non all'API pubblica per il primo rendering, voglio renderlo interno.

Qual è l'approccio migliore per questo?

Poiché avrò application , domain e infrastructure servizi, ho pensato di creare un application service per ogni domain service di cui ho bisogno. Ad esempio, il servizio Users richiede un'interfaccia e convalide (dominio), un'implementazione (infrastruttura) e quindi il servizio applicazione utenti, che non sarebbe altro che un'API esposta internamente. Quindi WebUiBundle interagisce solo con l'API dell'applicazione.

Che ne pensi?

    
posta JorgeeFG 30.05.2017 - 03:23
fonte

1 risposta

1

Qualunque cosa tu faccia mantenere il livello Dominio puro, senza alcuna dipendenza da altri livelli.

In Application Bundle, I have application, domain and infrastructure (tiers?), where application has the public API (presentation layer).

Il livello applicazione non è il livello presentazione .

Il Application layer espone i casi d'uso del tuo dominio. È uno strato sottile, senza regole di business. In generale c'è solo un livello di questo tipo. In questo livello è molto probabile che i servizi applicativi (classi) facciano sostanzialmente questo: carica una Aggregate radice da Repository , chiama un metodo su di esso e quindi persiste le modifiche a Repository . Certo, potrebbe avere altre responsabilità come l'autorizzazione: ad esempio qui controlli che se l'utente è un admin può cancellare qualsiasi Product .

Il Presentation layer è il client di Application layer . Potrebbe esserci più di un Presentation layer che utilizza Application layer . La responsabilità principale di questo livello è raccogliere l'input dell'utente e chiamare Application services - i servizi che vivono in Application layer . Un'altra responsabilità è quella di visualizzare i dati all'utente. Esempi di Presentation layers : un livello di presentazione MVC, un endpoint REST.

Since I will have application, domain and infrastructure services, I thought about making an application service for each domain service I need

Dovresti creare un servizio applicativo per ogni caso d'uso, non per ogni servizio di dominio. Una nota sui servizi di dominio: ricorda il modello di dominio anemico .

Informazioni sui tipi di utilizzo del livello Applicazione: se si ospita Presentation layer e Application layer sullo stesso server, ad esempio se si dispone di MCV sopra Application layer , allora è possibile chiama Application services direttamente dal tuo Controller , come le normali chiamate di metodo. Se si separa il frontend dal backend, non è possibile chiamare direttamente i servizi dell'applicazione ma è possibile utilizzare un endpoint REST sopra Application layer .

Now, I need to access an API from the WebUiBundle, but not the public API for first-rendering, I want to make it internal.

Application layer è sempre interno. Ha bisogno di un Presentation layer per renderlo accessibile.

    
risposta data 30.05.2017 - 10:02
fonte