Bibliothèque GraphQL TypeScript : guide complet des outils

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Bibliothèque GraphQL TypeScript : une approche moderne des API

GraphQL est un langage de requête pour API qui permet aux clients de demander uniquement les données nécessaires. Associé à TypeScript, il offre un système de typage puissant garantissant sécurité et autocomplétion. Sur pythonlib.ru, nous analyserons la bibliothèque clé pour travailler avec GraphQL en TypeScript — type-graphql, ainsi que les alternatives.



Pourquoi TypeScript + GraphQL ?

TypeScript ajoute un typage statique, essentiel pour les grands projets. Le schéma GraphQL, décrit via des classes TypeScript, devient une source unique de vérité : les modifications dans le code se synchronisent automatiquement avec l'API. Cela élimine les écarts entre la documentation et le comportement réel du serveur.



Bibliothèque principale : TypeGraphQL

type-graphql est un framework pour créer des API GraphQL en TypeScript à l'aide de décorateurs. Il suit le principe code-first : vous définissez le schéma via le code, et non via SDL (Schema Definition Language).



Installation

npm install type-graphql graphql reflect-metadata

Ajoutez dans tsconfig.json :

{  "emitDecoratorMetadata": true,  "experimentalDecorators": true}


Exemple : définition d'un type et d'un résolveur

Créons un modèle utilisateur simple et un résolveur pour récupérer les données.

import { ObjectType, Field, ID, Resolver, Query } from "type-graphql";

@ObjectType()class User { @Field(() => ID) id: number;

@Field() name: string;

@Field({ nullable: true }) email?: string;}

@Resolver()class UserResolver { @Query(() => [User]) users(): User[] { return [ { id: 1, name: "Anna", email: "anna@example.com" }, { id: 2, name: "Boris", email: null } ]; }}


Construction et démarrage du serveur

import { buildSchema } from "type-graphql";import { ApolloServer } from "@apollo/server";import { startStandaloneServer } from "@apollo/server/standalone";

async function main() { const schema = await buildSchema({ resolvers: [UserResolver] });

const server = new ApolloServer({ schema }); const { url } = await startStandaloneServer(server, { listen: { port: 4000 } }); console.log(`Serveur démarré : ${url}`);}

main();


Bibliothèques alternatives

  • NestJS + GraphQL — intégration avec un framework populaire. Utilise @nestjs/graphql basé sur type-graphql.
  • GraphQL Nexus — bibliothèque code-first sans décorateurs, utilisant des chaînes de méthodes.
  • Pothos GraphQL — bibliothèque code-first moderne avec un excellent support de TypeScript.


Fonctionnalités avancées de TypeGraphQL

Arguments et mutations

import { Arg, Mutation } from "type-graphql";

@Resolver()class UserResolver { @Mutation(() => User) createUser(@Arg("name") name: string, @Arg("email") email: string): User { return { id: 3, name, email }; }}


Validation avec class-validator

import { Length, IsEmail } from "class-validator";import { InputType, Field } from "type-graphql";

@InputType()class CreateUserInput { @Field() @Length(2, 30) name: string;

@Field() @IsEmail() email: string;}


Autorisation via middleware

import { UseMiddleware } from "type-graphql";

function AuthMiddleware(): MiddlewareFn { return async ({ context }, next) => { if (!context.user) throw new Error("Non autorisé"); return next(); };}

@Resolver()class UserResolver { @Query(() => User) @UseMiddleware(AuthMiddleware) me(): User { return { id: 1, name: "Utilisateur actuel", email: "user@example.com" }; }}


Intégration avec

Recommendations