Dans cet article, je vous guiderai à travers le processus de création d’une API GraphQL sans serveur使用 TypeScript, AWS Lambda et Apollo Server.
Calcul sans serveur
Le calcul sans serveur est un modèle d’exécution de calcul en cloud où les fournisseurs de cloud gèrent automatiquement l’infrastructure pour les applications en cours d’exécution. Dans ce modèle, les développeurs écrivent du code, et le fournisseur de cloud s’occupe de l’exécution, de l’échelle et du maintenance des serveurs, ce qui signifie que les développeurs n’ont pas à se soucier de la gestion des serveurs, de la provisionnement de l’infrastructure ou de l’échelle. Le terme « sans serveur » ne signifie pas qu’il n’y a pas de serveurs impliqués, mais plutôt que les tâches de gestion du serveur sont abstractées des développeurs. AWS Lambda est un service de calcul sans serveur offert par Amazon Web Services (AWS) qui vous permet d’exécuter du code sans avoir à prévoir ou à gérer des serveurs
GraphQL
Graph QL est une langue de requête pour les API et un runtime pour l’exécution de ces requêtes. Elle permet aux clients de demander exactement les données dont ils ont besoin, ce qui les rend plus efficaces par rapport à REST, qui peut récupérer trop de données ou trop peu. Avec GraphQL, les clients spécifient la forme et la structure de la réponse, récupérant plusieurs ressources dans une seule requête. Cette flexibilité améliore les performances et réduit les dépenses réseau. GraphQL est fortement typé, avec un schéma définissant les types disponibles et les opérations. Il est largement utilisé dans les applications modernes pour optimiser la communication entre le front end et le back end, permettant un management des données plus réactif et efficace.
Apollo Server
Il s’agit d’un serveur GraphQL open source populaire qui aide les développeurs à créer une API GraphQL avec facilité. Il simplifie le processus de construction d’une API GraphQL robuste et scalable en gérant la définition du schéma, l’exécution des requêtes et la formatation des réponses. Apollo Server supporte des fonctionnalités telles que la récupération de données, le cache et l’authentification, ce qui le rend très adaptable pour les applications modernes. Il fonctionne sans problème avec diverses sources de données, y compris les API REST, les bases de données et les microservices. Doté d’outils intégrés pour la surveillance des performances et l’handle des erreurs, Apollo Server est couramment utilisé pour simplifier le développement backend, fournissant une communication efficiente et flexible entre clients et serveurs dans les environnements GraphQL.
Pourquoi TypeScript ?
C’est un sur-ensemble de JavaScript qui ajoute un typage statique au langage. Il aide à attraper les erreurs pendant le développement, améliore la lisibilité du code et enhancing refactoring. En fournissant une sécurité de type et le support des outils, TypeScript permet des applications plus maintenables et plus scalables, ce qui les rend idéales pour les grands projets ou des équipes.
Pourquoi je trouve que le serverless et GraphQL fonctionnent si bien ensemble (ou « Une histoire d’amour en code »)
- Utilisation optimisée des ressources : La précision de la récupération de données de GraphQL aligne parfaitement avec le modèle pay-par-utilisation serverless, assurant l’utilisation efficiente des ressources.
- Backend simplifié : Les fonctions serverless peuvent gérer les résolveurs GraphQL efficacement, simplifiant l’architecture backend.
- Amélioration des performances : La capacité de GraphQL de réduire la surcharge de données se traduit par des applications plus rapides, en particulier quand combinée à une architecture serverless.
- Scalabilité : Les deux technologies sont avancées dans la gestion de charges variables, ce qui permet de constituer une combinaison hautement scalable.
- Économie de coûts : Le modèle payant en fonction de l’utilisation des services sans serveur, associé à la transmission efficiente de données de GraphQL, peut entraîner des économies importantes.
« La combinaison de services sans serveur et de GraphQL permet un développement rapide de API scalables et efficaces. C’est un tandem puissant qui peut réduire considérablement le temps de développement et les coûts d’opération. » – Nader Dabit, « Full Stack Serverless«
Voici une guide pas à pas pour déployer un service avec GraphQL dans AWS Lambda.
- Étape 1 : Initialisez un nouveau projet TypeScript et installez les dépendances.
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
- Étape 2 : Définissez le schéma GraphQL avec les éléments nécessaires.
import { gql } from 'apollo-server-lambda';
export const typeDefs = gql`
type Query {
auto: String
}
type Mutation {
sayAuto(name: String!): String
}
`;
- Étape 3: Implémentez les résolveurs :
export const resolvers = {
Query: {
auto: () => 'Hello from serverless GraphQL!',
},
Mutation: {
sayAuto: (_: any, { name }: { name: string }) => `Hello, ${name}!`,
},
};
- Étape 4 : Créez le gestionnaire 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();
- Étape 5 : Configurez le déploiement serverless. Créez un fichier
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
Vous pouvez écrire le code directement dans une fonction Lambda dans AWS (Petit Bonjour Monde) et utiliser des options de déploiement appropriées telles que CDK ou Terraform. Comme le calcul sans serveur et GraphQL continuent à évoluer, nous pouvons attendre de plus fortes outils et pratiques.
Conclusion
En adoptant GraphQL sans serveur, les développeurs peuvent créer des API qui scalent aisément et fournissent précisément ce que les clients ont besoin. C’est comme avoir une bouteille de crystal ball qui connait exactement quelles données chercher et scaler.
Source:
https://dzone.com/articles/serverless-computing-and-graphql