TypeScript e GraphQL a stack completo

TypeScript , GraphQL e NestJS costituiscono le parti principali del nostro stack in Dandy. Insieme, forniscono un potente ecosistema e un set di strumenti che ci consentono di muoverci rapidamente mantenendo un sistema robusto e affidabile. Le caratteristiche principali che ci forniscono sono:

  • Sicurezza di tipo end-to-end
  • Client generati automaticamente (per chiamate frontend e interservizi) tramite Graphql Code Generator
  • Separazione delle preoccupazioni per i nostri microservizi tramite GraphQL Federation
  • Controlli dello schema, tracciamento e metriche di integrità tramite Apollo Studio

Per iniziare, daremo un'occhiata al sistema da tre punti di vista: la generazione del codice che collega i componenti senza soluzione di continuità, il flusso delle richieste in fase di esecuzione e l'aspetto del codice dal punto di vista di uno sviluppatore che lavora su servizi e applicazioni all'interno il sistema.

Generazione del codice

Ecco la pipeline di generazione del codice, che opera in poche fasi:

Passando attraverso questo:

  • Abbiamo più servizi di backend e applicazioni React rivolte agli utenti.
  • I nostri servizi di backend definiscono i graphqltipi di oggetti utilizzando i decoratori GraphQL di NestJS, oltre a risolutori per gestire query e mutazioni su tali oggetti.
  • Backend servizi generano i propri schemi GraphQL utilizzando generazione file di schema di NestJS funzione .
  • Il nostro servizio Apollo Gateway utilizza tali schemi e genera uno schema federato che li combina, consentendo ai client di inviare operazioni GraphQL a qualsiasi dei nostri servizi sullo stesso endpoint.
  • I nostri pacchetti di generazione client utilizzano il graphql-codegenpacchetto e lo schema federato per generare tipi Typescript per tutti gli oggetti nel nostro schema.
  • graphql-codegenviene quindi utilizzato per generare tipi e codice runtime per operazioni definite all'interno di .graphqlfile nei nostri pacchetti client. Il nostro pacchetto client frontend genera hook React utilizzando Apollo Client, mentre il nostro pacchetto client backend utilizza il graphql-operationspacchetto npm per generare una classe client.

C'è molto da fare, ma le cose sono molto più semplici quando elaboriamo le richieste in fase di esecuzione:

La cosa fondamentale qui è che le app non devono mai interagire direttamente con i servizi di backend, né i servizi di backend tra loro: tutte le app e i servizi inviano query e mutazioni al gateway, che quindi le invia in modo appropriato. È importante sottolineare che questo è vero anche se la richiesta richiede che i dati siano composti da più servizi.

Codice

Per concludere, facciamo entrambi un passo indietro alla generazione del codice mentre ingrandiamo per dare una breve occhiata a come appare in pratica il codice effettivo (sia sviluppato che generato).

Come ricorderai, tutto inizia con classi e resolver definiti nei nostri servizi di backend:

Da quelli, generiamo uno schema GraphQL che include:

Successivamente componiamo lo schema federato (che unisce gli schemi dei nostri vari servizi), ma lo ometteremo qui poiché il nostro esempio utilizza solo un singolo tipo di oggetto da un singolo servizio.

Quindi viene generato un boilerplate per rendere il tipo di dati e la query utilizzabili dal frontend:

Che alla fine assomiglia a qualcosa del genere:

Il client di backend e l'utilizzo sono simili, tranne che il codice generato sfrutta il graphql-requestpacchetto indipendente dall'ambiente invece degli hook Apollo/React.

Conclusione

Questo è un esempio molto semplice, ma soprattutto sarebbe altrettanto semplice da usare se il tipo di dati e il risolutore fossero molto più complicati, o anche se la query richiedesse l'assemblaggio di dati da più servizi.

Nei prossimi articoli, approfondiremo alcune delle interessanti tecnologie e tecniche di cui abbiamo appena scalfito la superficie. Se c'è qualcosa di cui sei particolarmente interessato a saperne di più, contattaci e facci sapere!

Suggested posts

Evitare le conseguenze devastanti di un ictus: imparare dal viaggio di una famiglia.

Evitare le conseguenze devastanti di un ictus: imparare dal viaggio di una famiglia.

Introduzione Un ictus è un'emergenza medica che può colpire chiunque in qualsiasi momento. Si verifica quando il flusso sanguigno verso una parte del cervello viene interrotto, portando a un'improvvisa perdita della funzione cerebrale.

Jest: un potente framework di test JavaScript

Jest: un potente framework di test JavaScript

Il test è una parte essenziale dello sviluppo del software. Assicura che il codice sia affidabile, funzioni come previsto e riduce la probabilità di errori.

Related posts

La persecuzione dei cristiani: il crimine d'odio di cui non parliamo

Dimentica l'islamofobia: i cristiani (e gli ebrei) sono le principali vittime dei crimini di odio religioso.

La persecuzione dei cristiani: il crimine d'odio di cui non parliamo

Qualsiasi mente razionale sa che i circoli politici e mediatici sono dominati dalla sinistra, anche dall'estrema sinistra, uno stato di cose che crea uno squilibrio nel discorso politico. Nel campo della religione, questo squilibrio è chiaramente visibile: giornali e reti di sinistra non si affrettano a difendere la fede cristiana.

La rivoluzione sul posto di lavoro: i migliori esperti discutono di lavoro ibrido e remoto

La rivoluzione sul posto di lavoro: i migliori esperti discutono di lavoro ibrido e remoto

Nel panorama aziendale in rapida evoluzione di oggi, il concetto di lavoro ibrido e remoto ha acquisito uno slancio senza precedenti. Mentre le aziende continuano ad adattarsi alle mutevoli esigenze e aspettative dei propri dipendenti, esperti di vari settori si sono riuniti per discutere i vantaggi, le sfide e il futuro di questo modo di lavorare trasformativo.

3 modi comprovati per migliorare la tua abilità di scrittura

I vantaggi della scrittura e le strategie per aiutarti a farlo

3 modi comprovati per migliorare la tua abilità di scrittura

Nel 2022, con il rilascio di GPT-3, l'abilità di scrittura sembra diventare meno importante. Con l'intelligenza artificiale, anche le persone con una scrittura scadente possono generare personale di qualità.

Quell'archivio di minaccia: Vol 7 Black Basta

Quell'archivio di minaccia: Vol 7 Black Basta

Nel mondo interconnesso di oggi, la minaccia degli attacchi informatici è più diffusa che mai. I criminali informatici e gli attori dello stato-nazione cercano costantemente di sfruttare le vulnerabilità e rubare dati preziosi, ponendo un rischio significativo per le organizzazioni di tutte le dimensioni.