Biblioteca GraphQL TypeScript: guia completo de ferramentas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Biblioteca GraphQL TypeScript: abordagem moderna para API

GraphQL é uma linguagem de consulta para APIs que permite aos clientes solicitar apenas os dados necessários. Em conjunto com TypeScript, ele fornece um poderoso sistema de tipos, garantindo segurança e autocompletar. No pythonlib.ru, abordaremos a principal biblioteca para trabalhar com GraphQL em TypeScript — type-graphql, bem como alternativas.



Por que TypeScript + GraphQL?

TypeScript adiciona tipagem estática, o que é fundamental para projetos grandes. O esquema GraphQL, descrito por meio de classes TypeScript, torna-se uma fonte única de verdade: alterações no código são automaticamente sincronizadas com a API. Isso elimina discrepâncias entre a documentação e o comportamento real do servidor.



Biblioteca principal: TypeGraphQL

type-graphql é um framework para criar APIs GraphQL em TypeScript usando decoradores. Ele segue o princípio code-first: você define o esquema por meio do código, não através de SDL (Schema Definition Language).



Instalação

npm install type-graphql graphql reflect-metadata

Adicione ao tsconfig.json:

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


Exemplo: definindo tipo e resolver

Vamos criar um modelo simples de usuário e um resolver para obter dados.

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


Compilação e inicialização do 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 — integração com o popular framework. Usa @nestjs/graphql baseado em type-graphql.
  • GraphQL Nexus — biblioteca code-first sem decoradores, usa encadeamento de métodos.
  • Pothos GraphQL — biblioteca code-first moderna com excelente suporte a TypeScript.


Recursos avançados do TypeGraphQL

Argumentos e mutações

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


Validação com 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;}


Autorização via middleware

import { UseMiddleware } from "type-graphql";

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

@Resolver()class UserResolver { @Query(() => User) @UseMiddleware(AuthMiddleware) me(): User { return { id: 1, name: "Usuário atual", email: "usuario@exemplo.com" }; }}


Integração com

Recommendations