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-metadataAdicione 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/graphqlbaseado emtype-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
Também na biblioteca
Envio de SMS em C# (.NET): Integração com API de Serviços SMS via HttpClient
Configuração de aplicações C++: bibliotecas e abordagens
SDK OpenAI para JavaScript (Node.js): guia completo com exemplos
TypeStack/routing-controllers para TypeScript: guia completo com exemplos