Nell'implementazione dell'architettura API a strati con Spring MVC Boot, come connettersi a vari endpoint

0

Se si desidera implementare un design API stratificato, ad esempio, si può avere un livello API che rappresenta il livello dell'applicazione. E suppongo che il livello dell'applicazione sia rappresentato da un endpoint e da un uri. Supponiamo che implementiamo un controller basato su Boot MVC Spring, all'interno di quel controller potremmo fare una chiamata di riposo httpclient o usare la chiamata di SpringRest Template su un altro layer, ad esempio il livello API di infrastruttura.

La mia domanda è incentrata sul concatenamento e sul richiamo di apis differenti, il modello di riposo primaverile o httpclient utilizzato direttamente? O qualcos'altro più sofisticato? Chiedo, perché sembra ingombrante replicare molti oggetti di dominio. Puoi condividere oggetti modello / dominio tra diversi livelli?

    
posta berlinbrown2 11.01.2018 - 23:15
fonte

1 risposta

1

Diversi livelli non corrispondono a diversi punti finali in una rete. Queste sono preoccupazioni davvero separate con scopi distinti.

Livelli contro End-Point

I livelli riguardano la strutturazione del codice e il controllo delle dipendenze, ad es. non permettendo al modello di dominio di conoscere le tue opinioni. Separano la tua applicazione in sezioni orizzontali , come Presentazione , Accesso ai dati , Logica dell'applicazione , Dominio Logica .

Ogni applicazione avrà più livelli, indipendentemente dal fatto che sia distribuito. Prendere in considerazione:

  • Un'applicazione desktop autonoma senza funzionalità di rete - avrà più livelli, ma solo un endpoint.

  • Un sistema client / server. Ogni client avrà più livelli e così anche il server.

  • Un sistema peer-to-peer. La stessa applicazione può essere eseguita su molti endpoint, ma ognuno avrà tutti i suoi livelli.

  • Un sistema di microservizi. Ogni servizio avrà più livelli.

Ogni livello può essere sviluppato come un modulo separato, ad esempio una libreria. Ma alla fine tutti devono diventare parte della stessa applicazione. Ora oltre ai livelli, puoi suddividere l'applicazione verticalmente , ad esempio per funzione, ed eseguirli in un'applicazione diversa su un end-point diverso.

Detto questo, passiamo alle tue domande specifiche:

Come comunicare gli endpoint?

Dipende, ma di solito, il controllore riceverà una richiesta (ad esempio REST), estrarrà i dati rilevanti e li passerà al livello dell'applicazione.

Il livello applicazione può effettuare una chiamata a un altro punto finale. Tuttavia, non utilizzerà nulla di specifico della tecnologia come RestClient , ma passa attraverso un'interfaccia. La classe che implementa l'interfaccia utilizzerà quindi qualsiasi cosa debba.

Puoi condividere oggetti tra i livelli?

Sì, infatti devi. Ma ci saranno / dovrebbero essere delle restrizioni su quale livello può fare riferimento a quali oggetti - questo è il punto intero dei livelli. Esistono diversi approcci all'organizzazione dei livelli (ad esempio l'architettura tradizionale a tre livelli e cipolla) che definiscono il livello che può avere accesso agli oggetti di cui altri livelli.

Puoi condividere classi tra end-point

Ovviamente non puoi condividere oggetti - nella migliore delle ipotesi puoi serializzarli, trasmetterli e riattivarli. Ma le definizioni di classe possono essere assolutamente condivise tra i punti finali. Ci sono molti modi in cui ciò può accadere:

  • Più endpoint peer-to-peer possono essere solo diverse istanze della stessa applicazione. Qui, tutte le classi sono condivise.

  • Client / Server può o non può condividere alcuni livelli completamente (ad es. livello dominio) o parzialmente (modulo serializzazione dal livello infrastruttura).

  • I microservizi non dovrebbero condividere molto codice.

Si noti inoltre che si vorrà mantenere la comunicazione tra i punti finali al minimo (per quanto possibile). Questo è anche parte del motivo per cui generalmente non hai livelli su punti finali diversi. Di norma, una richiesta deve passare attraverso tutti i livelli, sarebbe un enorme successo in termini di prestazioni.

I controllori multipli possono condividere oggetti?

Più controller della stessa applicazione possono ovviamente accedere a tutte le parti del livello applicazione di cui hanno bisogno.

    
risposta data 19.01.2018 - 21:13
fonte

Leggi altre domande sui tag