développer une API GraphQL performante avec Node.js, TypeScript et Apollo Server
19/10/2025
développer une API GraphQL performante avec Node.js, TypeScript et Apollo Server
Vous êtes CTO ou lead technique d’une startup/PME et vous souhaitez adopter GraphQL pour gagner en flexibilité et performance ? Ce guide détaille la création d’une API GraphQL de A à Z, avec Node.js, TypeScript et Apollo Server, tout en intégrant Prisma pour interagir efficacement avec PostgreSQL.
1. configuration et initialisation du projet
- Créez le dossier et initialisez npm :
mkdir graphql-saas && cd graphql-saas npm init -y - Installez les dépendances :
npm install apollo-server graphql reflect-metadata npm install -D typescript ts-node @types/node - Générez le
tsconfig.json:npx tsc --init --rootDir src --outDir dist --strict - Structurez :
src/ ├─ schema/ ├─ resolvers/ ├─ db.ts └─ index.ts
2. définition du schéma GraphQL
Dans src/schema/typeDefs.ts :
import { gql } from 'apollo-server';
export const typeDefs = gql`
type User {
id: ID!
email: String!
name: String
}
type Query {
users: [User!]!
user(id: ID!): User
}
type Mutation {
createUser(email: String!, name: String): User!
}
`;
3. implémentation des résolveurs et connexion à PostgreSQL
On utilise Prisma comme ORM pour bénéficier de migrations et d’une API type-safe.
- Initialisez Prisma :
npx prisma init --datasource-provider postgresql - Définissez le modèle dans
prisma/schema.prisma:
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}
- Exécutez la migration :
npx prisma migrate dev --name init
Dans src/db.ts :
import { PrismaClient } from '@prisma/client';
export const prisma = new PrismaClient();
Dans src/resolvers/index.ts :
import { prisma } from '../db';
export const resolvers = {
Query: {
users: () => prisma.user.findMany(),
user: (_: any, args: { id: number }) => prisma.user.findUnique({ where: { id: args.id } }),
},
Mutation: {
createUser: (_: any, args: { email: string; name?: string }) =>
prisma.user.create({ data: args }),
},
};
4. lancement de l’API Apollo Server
Dans src/index.ts :
import 'reflect-metadata';
import { ApolloServer } from 'apollo-server';
import { typeDefs } from './schema/typeDefs';
import { resolvers } from './resolvers';
async function start() {
const server = new ApolloServer({ typeDefs, resolvers });
const { url } = await server.listen({ port: 4000 });
console.log(`🚀 Serveur prêt sur ${url}`);
}
start().catch(console.error);
Lancez avec npx ts-node src/index.ts et rendez-vous sur http://localhost:4000 pour tester vos requêtes.
5. optimisation et bonnes pratiques
- Batching et caching avec DataLoader pour éviter le N+1.
- Validation et sécurité : utilisez
graphql-shieldouMartinpour les permissions. - Métriques et monitoring : exposez un endpoint Prometheus (Docker +
/metrics). - Tests automatisés : intégrez
Jestetapollo-server-testingdans votre pipeline CI/CD. - Déploiement : construisez une image Docker optimisée (
multistage build) puis déployez sur Kubernetes ou Fargate.
6. suivi de la performance
Surveillez :
| Indicateur | Objectif |
|---|---|
| Temps moyen de requête | < 50 ms |
| Taux d’erreurs | < 1 % |
| Mémoire utilisée | < 200 Mo |
erreurs fréquentes
- Schema mismatch entre client et serveur : vérifiez les types.
- Connexion BD non gérée correctement : toujours fermer
prisma.$disconnect(). - Problèmes CORS : configurez
server.applyMiddleware({ cors: true }).
En suivant ces étapes, vous disposerez d’une API GraphQL robuste, scalable et facile à maintenir, parfaitement adaptée à un produit SaaS ou un module CRM/ERP. Pour un accompagnement personnalisé et gagner du temps, découvrez nos services SaaS ou contactez notre équipe via notre page de contact.
Prêt à accélérer votre développement GraphQL ? Parlons-en !

