Biblioteca GraphQL para TypeScript: guía completa de herramientas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Biblioteca GraphQL para TypeScript: un enfoque moderno para las API

GraphQL es un lenguaje de consultas para API que permite a los clientes solicitar solo los datos necesarios. En combinación con TypeScript, proporciona un potente sistema de tipos que garantiza seguridad y autocompletado. En pythonlib.ru, analizaremos la biblioteca clave para trabajar con GraphQL en TypeScript — type-graphql, así como alternativas.



¿Por qué TypeScript + GraphQL?

TypeScript agrega tipado estático, lo cual es fundamental para proyectos grandes. El esquema de GraphQL, descrito a través de clases de TypeScript, se convierte en una única fuente de verdad: los cambios en el código se sincronizan automáticamente con la API. Esto elimina las discrepancias entre la documentación y el comportamiento real del servidor.



Biblioteca principal: TypeGraphQL

type-graphql es un framework para crear API GraphQL en TypeScript utilizando decoradores. Sigue el principio code-first: usted define el esquema a través del código, no mediante SDL (Schema Definition Language).



Instalación

npm install type-graphql graphql reflect-metadata

Agregue en tsconfig.json:

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


Ejemplo: definición de tipo y resolver

Creemos un modelo de usuario simple y un resolver para obtener datos.

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: "Ana", email: "anna@example.com" }, { id: 2, name: "Boris", email: null } ]; }}


Compilación e inicio del servidor

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(`Servidor iniciado: ${url}`);}

main();


Bibliotecas alternativas

  • NestJS + GraphQL — integración con el popular framework. Utiliza @nestjs/graphql basado en type-graphql.
  • GraphQL Nexus — biblioteca code-first sin decoradores, utiliza cadenas de métodos.
  • Pothos GraphQL — biblioteca code-first moderna con excelente soporte para TypeScript.


Funcionalidades avanzadas de TypeGraphQL

Argumentos y mutaciones

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 }; }}


Validación con 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;}


Autorización mediante middleware

import { UseMiddleware } from "type-graphql";

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

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


Integración con

Recommendations