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-metadataAjoutez 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/graphqlbasé surtype-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
Aussi dans la bibliothèque
Internationalisation (i18n) en TypeScript : la bibliothèque i18next
Mise en cache en Rust : Redis, Memcached et solutions intégrées
Travailler avec les images en C# (.NET) : guide complet
Client OAuth pour Java : aperçu des bibliothèques et exemples de code