Sta prendendo in giro i microservizi?

6

Sto cercando di capire come funziona il flusso di lavoro di sviluppo per lavorare con microservizi e applicazioni multicontainer docker.

La cosa che sto cercando in particolare di risolvere è ottenere un buon flusso di lavoro "live reload" in sviluppo.

Ad esempio:

Per il mio frontend posso usare webpack-dev-server che ricarica automaticamente la pagina ogni volta che salvi le modifiche. Ciò semplifica la scrittura rapida del front-end, senza attendere l'implementazione.

Tuttavia, se il frontend sta visualizzando alcuni dati recuperati da un'API REST, probabilmente eseguirò una versione di sviluppo di tale API (che è essa stessa in fase di ricarica con nodemon o simile) o un'API simulata. Questo è abbastanza facile da ottenere con il webpack che utilizza le configurazioni proxy per l'ambiente di sviluppo.

Per la mia API REST - Analogamente, potrei voler prendere in giro altri microservizi. Ad esempio, se la mia API REST aveva un endpoint POST per il salvataggio di un'immagine - e lo salverò su un bucket di AWS S3, tramite aws-sdk, è probabile che voglia prendere in giro questa funzionalità.

Essenzialmente - come sembra - è per ogni (o più) microservizio - anche io voglio creare una versione finta di questo.

Quello che immagino sarebbe il mio flusso di lavoro, è qualcosa del genere:

  1. Sul front-end creo un pulsante che invia un'immagine al back-end. Controllo che la richiesta POST sia stata eseguita correttamente.
  2. Sulla mia API REST, creo un endpoint che riceve la richiesta POST. Faccio clic sul pulsante front-end e controllo che il back-end lo stia ricevendo.
  3. Creo un microservizio back-end per effettuare chiamate AWS SDK. Lo leggo per indicare un vero secchio AWS di sviluppo. Collego l'endpoint POST per inviare l'immagine a questo microservizio. Faccio clic sul pulsante di frontend e controllo che finisca nel bucket S3.
  4. Tuttavia, l'invio di questa immagine è troppo lenta, pertanto creo una versione fittizia del servizio SDK di AWS. Io cambio l'API REST per usarla invece.
  5. Sul frontend ora scrivo alcune funzionalità per visualizzare un 'immagine salvata!' messaggio di conferma.

La mia domanda è:

  1. È un modo standard di fare le cose, o sto andando fuori di testa?
  2. C'è un modo nella finestra mobile per passare rapidamente tra se sto usando il microservizio reale o quello deriso?
posta dwjohnston 25.01.2018 - 22:21
fonte

1 risposta

2

Sì, prendere in giro i tuoi servizi esterni è un'idea valida ed è spesso l'unico modo per testare il codice non modificato senza una vera istanza fisica.

Non è accurato come usare un'istanza di prova della cosa reale dal momento che il tuo comportamento derisorio è:

  • La tua comprensione del servizio esterno, non il comportamento effettivo del servizio esterno
  • Ritarda rispetto alle modifiche e agli aggiornamenti del servizio esterno
  • Non ha implicazioni temporali o prestazioni rappresentative che sono spesso di interesse per i test

Sono un buon modo per eseguire rapidamente i test "ho appena violato qualcosa", "gestisco gli errori di restituzione e l'inaspettato" e "quanto sono sensibile alle prestazioni del servizio esterno". Ottieni la flessibilità e la copertura del test del sistema al costo dei costi di manutenzione.

Molti siti Web sono andati giù per mancanza di tali test, ma questo non è l'unico modo per ottenere una copertura di test per queste cose, come hanno sottolineato i commentatori usando i test unitari.

    
risposta data 22.04.2018 - 01:26
fonte