Un'ampia API per diversi microservizi rispetto a molte piccole API ciascuna con la propria API

7

Ho un'applicazione che è divisa in un numero di servizi. Da una precedente domanda qui, penso che inizialmente JSON / REST sia la via da seguire per la comunicazione.

Alcuni dei miei servizi micro devono essere disponibili pubblicamente, da utilizzare da parte di terze parti.

Quindi ora mi sto interrogando sul modo migliore di strutturarlo. Riesco a vedere 2 diverse strutture, ciascuna con pro e contro.

  1. Ogni servizio ha il proprio dominio e livello di servizio Web, quindi potrei avere api.customers.mycompany.com , api.documents.mycompany.com , api.users.mycompany.com ecc.
  2. Tutti i servizi si trovano dietro un livello di servizio Web comune, quindi ho; api.mycompany.com/customers , api.mycompany.com/documents ecc.

L'opzione 1 offre una migliore riduzione delle dipendenze e della manutenibilità, ma al costo di dover gestire molti più domini e, se una terza parte ha bisogno di accedere a diversi servizi, deve archiviare e gestire diversi URL diversi

L'opzione 2 ovviamente rende più difficile la manutenzione e lo sviluppo, poiché l'intero livello Web deve essere aggiornato se viene aggiunto un nuovo metodo a qualsiasi API e il livello Web acquisisce la conoscenza delle chiamate di marshalling per ogni servizio specifico. Ma l'opzione 2 centralizza anche la registrazione, la gestione degli errori del servizio di sicurezza e così via. Significa anche che noi (e le nostre terze parti) abbiamo solo un singolo dominio di cui preoccuparci.

Quindi la mia domanda è; per quelli di voi che sono andati su questa strada, quale opzione avete scelto e ve ne siete pentiti?

    
posta Matt 08.06.2016 - 15:57
fonte

1 risposta

6

In realtà si tratta di esporre i tuoi microservizi individualmente anziché dietro un wrapper. Direi che se i tuoi servizi sono già pronti per terze parti "allora semplicemente esponendoli avrebbe senso.

Tuttavia, la sicurezza e la compatibilità con il cliente indicano che si desidera un singolo punto di accesso che inoltra o converta l'API esterna alle API del servizio interno.

Non penso che tu ci abbia dato abbastanza informazioni per decidere quale sia il "migliore", ma tieni presente che se hai una singola API esterna, puoi modificare i tuoi microservizi senza influire sull'API che il cliente vede. Ad esempio, se si modifica un servizio per utilizzare un'API diversa, è possibile mantenere invariata l'API esterna e modificare solo le chiamate effettuate.

Quindi probabilmente andrei con l'opzione 2, e la farò vivere come progetto separato, in gran parte indipendente dai microservizi. Internamente, ignori completamente questo livello - è solo per l'accesso esterno.

    
risposta data 08.06.2016 - 16:45
fonte

Leggi altre domande sui tag