Struttura dei microservizi
Questo tipo di architettura prevede che ogni compito sia eseguito da un microservizio apposito. I microservizi sono totalmente distaccati tra di loro: non è necessario che siano scritti nello stesso linguaggio di programmazione e idealmente non si “conoscono tra loro” questo significa che, all’interno del codice non ci sono riferimenti diretti ad altri microservizi.
Come strutturare un microservizio
I. Definizione del purpose del microservizio
Un microservizio deve occuparsi di svolgere un solo compito, e deve essere scritto in modo che sia indipendente da altri microservizi. Questo significa che non deve avere riferimenti diretti ad altri microservizi, ma deve comunicare con essi tramite API oppure tramite messaggi.
Il primo passo per capire come strutturare un microservizio è, per l'appunto, definire chiaramente il compito che deve svolgere e, dunque, le sue funzionalità.
Esempi di compiti che possono essere svolti da un microservizio:
- Autenticazione
- Invio di email
- Generazione di pdf
II. Linguaggio di programmazione
Come detto in precedenza i microservizi possono essere scritti in linguaggi di programmazione diversi. Per questo motivo è importante che il linguaggio scelto sia quello più adatto per il compito che il microservizio deve svolgere. La cosa migliore quindi è comprendere a pieno quali sono le caratteristiche migliori per il compito che il microservizio deve svolgere e basarsi su queste per poter scegliere il linguaggio migliore
III. Creazione delle funzionalità
Una volta definito il compito che il microservizio deve svolgere e il linguaggio di programmazione da utilizzare, è possibile iniziare a scrivere il codice. Nella scrittura bisogna tenere a mente la necessità di renderle il più testabili possibile e, quindi, è buona pratica creare delle funzioni che svolgono un singolo compito con il minor numero di dipendenze possibile.
Nel caso in cui il microservizio debba esporre delle API bisogna evitare di scrivere le funzioni direttamente nel resolver ma è preferibile creare delle funzioni a parte che vengono poi chiamate dal resolver. Questo permette alle funzioni di essere indipendenti dal dato che arriva direttamente all'endpoint e che quindi possono essere testate in modo più semplice.