Una domanda recente ha menzionato il termine schema canonico in un contesto di architettura dei microservizi . Dopo aver letto l'articolo di Wikipedia , così come una delle risposte alla domanda, Ancora non capisco cosa schema canonico riguardi . Ho capito che è un modo per disaccoppiare i microservizi facendo un po 'di magia con il modello di dati, ma io sono perso quando si tratta dell'applicazione concreta del modello. Altre risorse stanno parlando di set di informazioni standardizzati, che rendono le cose solo più criptiche.
Immagina che il microservizio A stia consumando messaggi dal microservizio B attraverso un servizio di messaggi in coda. Diciamo che quei messaggi JSON contengono informazioni sulla disponibilità dei prodotti in un magazzino. Mentre A non deve sapere nulla sull'esistenza o sulla posizione di B, immagino che debba ancora sapere:
-
Che i messaggi sono formattati usando JSON. Se B improvvisamente inizia a formattare messaggi in XML, Riesco a malapena a vedere come A si adatterebbe magicamente da solo , a meno che non sia stato specificamente programmato per gestire i messaggi XML e JSON.
-
Il modello dati attuale, limitato alla parte utilizzata da A. Se A richiede semplicemente l'ID prodotto e la disponibilità, A potrebbe non preoccuparsi di sapere che il messaggio JSON contiene anche il nome completo del prodotto o la posizione all'interno del magazzino. Ma deve sapere che l'ID prodotto è memorizzato nel campo
/product/id
e formattato come GUID e che la quantità è memorizzata in/quantity
e formattata come un numero. Di nuovo, se B passa agli ID basati sulong
per i prodotti, A non sarà in grado di gestirli, a meno che il programmatore abbia in mente questo potenziale cambio di formato.
Quindi, di cosa tratta questo modello di progettazione e come viene utilizzato nella pratica? Dato il mio esempio con i servizi A e B, che cosa succederebbe se venisse applicato un modello di schema canonico?
Forse è tutto su A leggere lo schema di B e adattarsi dinamicamente ad esso? Quindi è esattamente come Swagger, e piace anche leggere WSDL su runtime e determinare come deve essere chiamato un servizio SOAP, vero?