Sto cercando di capire dove GraphQL è più adatto da utilizzare all'interno di un'architettura Microservice.GraphQL e Microservice Architecture
C'è un dibattito sull'avere un solo schema GraphQL che funziona come gateway API che inoltra la richiesta ai microservizi mirati e costringe la loro risposta. I microservizi utilizzano ancora il protocollo REST/Thrift per il pensiero comunicativo.
Un altro approccio è invece quello di disporre di più schemi GraphQL uno per microservizio. Avere un server gateway API più piccolo che indirizza la richiesta al microservizio di destinazione con tutte le informazioni della richiesta + la query GraphQL.
primo approccio
Avere 1 GraphQL schema come un gateway API avrà un aspetto negativo in cui ogni volta che si cambia il vostro input contratto Microservice/uscita, dobbiamo cambiare il GraphQL schema di conseguenza sul gateway API Side.
secondo approccio
In caso di utilizzo dello schema GraphQL multipla per microservices, avere senso in un modo perché GraphQL impone una definizione dello schema, e il consumatore dovrà rispettare input/output data dal Microservice.
Domande
Dove trovate GraphQL la giusta misura per la progettazione di architettura Microservice?
Come si progetta un gateway API con una possibile implementazione GraphQL?
+1 avrei dovuto mettere un disclaimer sul mio post che non ho avuto esperienza con GraphQL, invece di rispondere basato su un brevissimo lavoro di lettura durante la ricerca per rispondere alla domanda. Penso che questa risposta affronti meglio la domanda dell'OP. –
@helfer: questo ha davvero senso :) grazie. Ho poche domande in cima a questa splendida risposta. - Stai dicendo che GraphQL deve essere usato come gateway API? - Diciamo che ho un ** ordine ** Microservice che espone un endpoint REST o GraphQL. Una volta finito, devo aggiornare lo schema GraphQL principale per riflettere esattamente gli stessi dati che il microservice esporrà? Non suona duplicazione o si allontana dalla cultura dei microservizi che dovrebbe essere implementata in modo indipendente? Eventuali modifiche a un microservizio devono essere riflesse/duplicate nello schema GraphQL principale? – Fabrizio
@Fabrizio la cosa bella con GraphQL è che anche se l'API REST del backend cambia, lo schema GraphQL può rimanere lo stesso, a patto che ci sia un modo per ottenere i dati che il servizio REST ha esposto in precedenza. Se espone più dati, il modo canonico per affrontare questo è semplicemente aggiungere nuovi campi/tipi allo schema esistente. I ragazzi di Facebook che hanno creato GraphQL mi hanno detto di non aver mai apportato una modifica al loro schema in quattro anni. Tutte le modifiche apportate sono state additive, il che significa che i nuovi client potrebbero utilizzare la nuova funzionalità, mentre i vecchi client continuerebbero a funzionare. – helfer