In questo articolo, vi guiderò attraverso il processo di creazione di un API GraphQL serverless utilizzando TypeScript, AWS Lambda e Apollo Server.
Calcolo serverless
Il calcolo serverless è un modello di esecuzione cloud computing in cui i fornitori cloud gestiscono automaticamente l’infrastruttura per l’esecuzione delle applicazioni. In questo modello, i programmatori scrivono il codice, e il fornitore cloud si occupa di eseguire, scalare e mantenere i server, ovvero i programmatori non devono preoccuparsi della gestione dei server, della provisioning dell’infrastruttura o dell’scaling. Il termine “serverless” non significa che non ci siano server coinvolti, ma piuttosto che le attività di gestione server sono astratte dai programmatori. AWS Lambda è un servizio di calcolo serverless fornito da Amazon Web Services (AWS) che vi permette di eseguire il codice senza la necessità di pianificare o gestire server
GraphQL
GraphQL è un linguaggio di query per le API e un runtime per l’esecuzione di questi query. Permette ai clienti di richiedere esattamente i dati necessari, rendendolo più efficiente rispetto a REST, che può fornire dati in eccesso o mancanti. Con GraphQL, i clienti specificano la forma e la struttura della risposta, recuperando molti risorse in una singola richiesta. questa flessibilità migliora le prestazioni e riduce l’overhead della rete. GraphQL è fortemente tipizzato, con un schema che definisce i tipi disponibili e le operazioni. È ampiamente utilizzato in applicazioni moderne per ottimizzare la comunicazione tra il front-end e il back-end, consentendo una gestione dati più reattiva e efficiente.
Apollo Server
È un popolare server GraphQL open-source che aiuta i sviluppatori a creare con facilità una API GraphQL. Riduce il processo di creazione di una API GraphQL robusta e scalabile, occupandosi della definizione dello schema, dell’esecuzione delle query e della formattazione delle risposte. Apollo Server supporta funzionalità come il recupero dati, il caching e l’autenticazione, rendendolo adattabile a applicazioni moderne. Funziona senza problemi con varie fonti dati, comprese API REST, database e microservizi. Dotato di strumenti integrati per il monitoraggio delle prestazioni e la gestione degli errori, Apollo Server viene comunemente usato per semplificare lo sviluppo backend, fornendo una comunicazione efficiente e flessibile tra clienti e server negli ambienti GraphQL.
Perché TypeScript?
È un super set di JavaScript che aggiunge la tipografia statica al linguaggio. aiuta a catturare errori durante lo sviluppo, migliora la leggibilità del codice e ne aumenta la refattoring. Fornendo sicurezza di tipo e supporto agli strumenti, TypeScript consente applicazioni più maintainable e scalabili, rendendolo ideale per progetti grandi o team.
Perché ritengo che Serverless e GraphQL funzionino così bene insieme (o “Un amore nella storia del codice”)
- Uso ottimizzato delle risorse: L’esatto recupero dati di GraphQL si allinea perfettamente con il modello di utilizzo pay-per-use serverless, assicurando l’utilizzo efficiente delle risorse.
- Backend semplificato: Le funzioni serverless possono gestire i risolutori GraphQL efficientemente, semplificando l’architettura backend.
- Prestazioni migliorate: La capacità di GraphQL di ridurre l’overhead dati si traduce in applicazioni più veloci, specialmente quando combinata con l’architettura serverless.
- Scalabilità: Entrambe le tecnologie eccellono nel gestire carichi variabili, rendendo la combinazione altamente scalabile.
- Costi-efficiente: Il modello a pagamento progressivo del computing serverless, unito alla trasferimento efficiente di dati di GraphQL, può condurre a risparmi significativi.
“La combinazione di serverless e GraphQL consente un’evoluzione rapida di API scalabili e efficienti. È un potente sodalizio che può ridurre显著emente il tempo di sviluppo e i costi operativi.” – Nader Dabit, “Full Stack Serverless“
Ecco il guide passo passo per la distribuzione di un servizio con GraphQL in AWS Lambda.
- Step 1: Inizializza un nuovo progetto TypeScript e installa le dipendenze.
mkdir serverless-graphql-api
cd serverless-graphql-api
npm init -y
npm install typescript @types/node --save-dev
npx tsc --init
npm install apollo-server-lambda graphql @types/aws-lambda
npm install --save-dev serverless-offline
- Step 2: Defini il schema GraphQL con gli elementi necessari.
import { gql } from 'apollo-server-lambda';
export const typeDefs = gql`
type Query {
auto: String
}
type Mutation {
sayAuto(name: String!): String
}
`;
- Step 3: Implementazione dei risolutori:
export const resolvers = {
Query: {
auto: () => 'Hello from serverless GraphQL!',
},
Mutation: {
sayAuto: (_: any, { name }: { name: string }) => `Hello, ${name}!`,
},
};
- Step 4: Creazione del gestore Lambda:
import { ApolloServer } from 'apollo-server-lambda';
import { typeDefs } from './schema';
import { resolvers } from './resolvers';
const server = new ApolloServer({
typeDefs,
resolvers,
});
export const graphqlHandler = server.createHandler();
- Step 5: Configura la distribuzione serverless. Crea un file
serverless.yml
:
service: serverless-graphql-api provider: name: aws runtime: nodejs16.x stage: dev region: us-east-1 functions: graphql: handler: handler.graphqlHandler events: - http: path: graphql method: post - http: path: graphql method: get plugins: - serverless-offline
Puoi scrivere il codice direttamente in una funzione Lambda in AWS (Quick Hello World) e usare opzioni di distribuzione appropriate come CDK o Terraform. Poiché sia il calcolo serverless che GraphQL continuano a evolversi, ci possiamo aspettare di assistere all’emergere di strumenti e pratiche ancora più potenti.
Conclusione
Embracendo il serverless GraphQL, i sviluppatori possono creare API che scalano senza sforzo e che forniscono esattamente ciò di cui i clienti hanno bisogno. È come avere una pallina da cristallo che sa sempre esattamente quali dati recuperare e come scalare.
Source:
https://dzone.com/articles/serverless-computing-and-graphql