Documentação Automática no Node.js com Fastify e Zod: Um Guia Prático
Você é do time que ama organizar o caos ou, pelo menos, fingir que consegue? Bora falar de um backend bonitinho e organizadinho, porque hoje a gente vai criar um backend tipado com Fastify e Zod. Tudo isso com muito amor, carinho, e claro, aquela dose de caos programático que todo dev adora (ou finge que não odeia).
Preparando o Terreno
Antes de colocar a mão na massa, vamos configurar nosso projeto do zero absoluto. Abra seu terminal favorito (ou o que menos trava) e digite:
pnpm init
Depois disso, vamos instalar os pacotes que serão nossos melhores amigos nessa jornada:
pnpm add fastify @fastify/swagger @fastify/swagger-ui @fastify/cors fastify-type-provider-zod zod
pnpm add -D typescript tsx @types/node
É isso mesmo: instalamos o Fastify, o Zod e outros pacotinhos mágicos. A ideia é que nosso backend valide as requisições, documente as rotas, e ainda faça café (ok, essa parte ainda não é possível).
Configurando o Ambiente
Crie o arquivo tsconfig.json
para configurar o TypeScript com o comando:
tsc --init
E substitua o conteúdo pelo padrão de configuração do Node.js 20. O repositório tsconfig-bases
da Microsoft tem um modelo que você pode copiar direto para lá:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"strict": true,
"esModuleInterop": true
}
}
Agora, no arquivo package.json
, vamos adicionar um script para facilitar a execução do servidor:
"scripts": {
"start": "tsx src/server.ts"
}
Perfeito! Estamos prontos para codar. Crie a pasta src
e, dentro dela, o arquivo server.ts
.
O Primeiro Olá Mundo
No arquivo server.ts
, começamos com as importações básicas:
import Fastify from "fastify";
import { fastifySwagger } from "@fastify/swagger";
import { fastifySwaggerUi } from "@fastify/swagger-ui";
import { ZodTypeProvider } from "fastify-type-provider-zod";
const app = Fastify().withTypeProvider<ZodTypeProvider>();
app.register(fastifySwagger, {
openapi: {
info: {
title: "Typed API",
version: "1.0.0"
}
}
});
app.register(fastifySwaggerUi, {
routePrefix: "/docs",
staticCSP: true
});
app.get("/", async () => {
return { message: "Olá, Mundo!" };
});
app.listen({ port: 3333 }, () => {
console.log("HTTP server running on http://localhost:3333/docs");
});
Execute o servidor:
pnpm start
Abra o navegador em http://localhost:3333/docs
e admire a magia do Swagger. Parabéns, você tem uma API funcional com documentação automática!
Validando Dados com Zod
Agora é hora de dar poder ao nosso backend. Vamos criar rotas que validam entradas e saídas usando o Zod. No arquivo src/routes.ts
, adicione:
import { FastifyInstance } from "fastify";
import { z } from "zod";
export async function userRoutes(app: FastifyInstance) {
const UserSchema = z.object({
name: z.string().min(1, "Name is required"),
email: z.string().email("Invalid email")
});
app.post("/users", {
schema: {
body: UserSchema,
response: {
201: z.null()
},
tags: ["Users"],
description: "Create a new user"
}
}, async (request, reply) => {
const { name, email } = request.body;
console.log(`New user: ${name}, ${email}`);
reply.code(201).send();
});
}
No arquivo server.ts
, registre as rotas:
import { userRoutes } from "./routes";
app.register(userRoutes);
Agora, teste no Swagger. Quando você criar um usuário, ele vai validar os campos com as regras que definimos no Zod.
Documentando Tudo
Quer uma documentação ainda mais robusta? Adicione exemplos e descrições:
app.post("/users", {
schema: {
body: UserSchema,
response: {
201: z.null().describe("User created successfully")
},
tags: ["Users"],
description: "Create a new user",
example: {
name: "John Doe",
email: "john.doe@example.com"
}
}
}, async (request, reply) => {
// Implementação
});
Com isso, sua API fica ainda mais amigável para os devs que vão usá-la (ou seja, você mesmo no futuro, depois de esquecer como funciona).
Maninho, talvez você curta?
- Melhor Linguagem de Programação 2025: Explorando as Opções para sua Carreira em Tecnologia
- Hidratação no Front-End: O que é e como ela resolve problemas de SSR e CSR
- Como Sair de Pleno para Senior em 2025: O Guia Definitivo Sem Ficar Batendo Cabeça
- Guia Definitivo: Como e Quando Usar find e findIndex no JavaScript
- Diferença entre every e some no JavaScript: O Guia Definitivo para Quem Já Quebrou a Cabeça com Arrays
Conclusão
Aí está! Um backend moderno, tipado e com documentação automatizada, pronto para brilhar em qualquer projeto. Agora é só colocar sua criatividade para rodar e construir APIs fantásticas com Fastify e Zod.
E lembre-se: nada é tão satisfatório quanto um backend redondinho. Se você curtiu, compartilhe com seus amigos devs e não esqueça de deixar nos comentários quais outras ideias de projetos ou tutoriais você gostaria de ver.
Abraços e até a próxima!
Angular performance Angular Signals Apps Multiplataforma automação de tarefas Backend Boas Práticas boas práticas Git controle de versão desenvolvedores desenvolvimento backend Desenvolvimento de Software Desenvolvimento Frontend Desenvolvimento Mobile Desenvolvimento Web desenvolvimento ágil devops dicas para devs escalabilidade ferramentas de Git ferramentas de programação Front-end Git Hooks integração contínua inteligência artificial JavaScript Linguagens de Programação Media Queries mercado de tecnologia Mercado de Trabalho Tech Node.js produtividade dev Programação Programação Orientada a Objetos programação para iniciantes programação reativa Python React React Suspense Rust Tecnologia Trunk-Based Development web development workflow Git workflows Git
Publicar comentário