<h2>Por que Fastify?</h2>
<p>Fastify é um framework web moderno para Node.js que se destaca pela sua velocidade e eficiência. Diferentemente do Express, que é mais minimalista e flexível, Fastify foi construído com performance como prioridade desde o início, oferecendo suporte nativo a HTTP/2, validação de schema e logging estruturado. Se você trabalha com APIs de alta concorrência ou microsserviços, Fastify reduz latência e aumenta throughput significativamente.</p>
<p>A curva de aprendizado é suave porque a API é intuitiva. Em poucos minutos você consegue subir um servidor robusto. O framework também escala bem com a complexidade do projeto, desde uma simples API REST até sistemas complexos com middleware, plugins e validação rigorosa.</p>
<h2>Instalação e Configuração Inicial</h2>
<p>Comece instalando o Fastify e suas dependências essenciais:</p>
<pre><code class="language-bash">npm install fastify
npm install --save-dev nodemon</code></pre>
<p>Crie um arquivo <code>server.js</code>:</p>
<pre><code class="language-javascript">import Fastify from 'fastify';
const fastify = Fastify({
logger: true
});
fastify.get('/', async (request, reply) => {
return { message: 'Olá, Fastify!' };
});
const start = async () => {
try {
await fastify.listen({ port: 3000 });
console.log('Servidor rodando em http://localhost:3000');
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();</code></pre>
<p>Execute com <code>node server.js</code>. O <code>logger: true</code> ativa logs automáticos de todas as requisições, mostrando dados brutos e tempos de resposta. Use <code>nodemon</code> em desenvolvimento adicionando <code>"dev": "nodemon server.js"</code> ao <code>package.json</code>.</p>
<h3>Plugins e Estrutura Modular</h3>
<p>Fastify funciona com plugins, permitindo código modular e reutilizável. Um plugin é basicamente uma função assíncrona que recebe a instância do Fastify:</p>
<pre><code class="language-javascript">async function rotasUsuarios(fastify) {
fastify.get('/usuarios', async (request, reply) => {
return [{ id: 1, nome: 'João' }];
});
fastify.post('/usuarios', async (request, reply) => {
return { id: 2, nome: request.body.nome };
});
}
fastify.register(rotasUsuarios, { prefix: '/api' });</code></pre>
<p>Agora suas rotas estão em <code>/api/usuarios</code>. Organize plugins em arquivos separados conforme a aplicação cresce. Isso mantém o código limpo e testável.</p>
<h2>Validação com JSON Schema</h2>
<h3>Fundamentos do JSON Schema</h3>
<p>JSON Schema é um padrão para descrever a estrutura e validar dados JSON. Fastify integra validação de schema automaticamente através da biblioteca <code>ajv</code>. Você define schemas e o Fastify valida requisições antes de chegar à sua rota.</p>
<pre><code class="language-javascript">const schemaUsuario = {
type: 'object',
required: ['nome', 'email'],
properties: {
nome: { type: 'string', minLength: 3 },
email: { type: 'string', format: 'email' },
idade: { type: 'integer', minimum: 0, maximum: 150 }
}
};
fastify.post('/usuarios', {
schema: {
body: schemaUsuario,
response: {
200: {
type: 'object',
properties: {
id: { type: 'number' },
nome: { type: 'string' }
}
}
}
}
}, async (request, reply) => {
const { nome, email } = request.body;
return { id: 1, nome };
});</code></pre>
<p>Envie um POST com JSON inválido (sem <code>nome</code> ou com <code>email</code> malformado) e receberá um erro <code>400</code> automático com detalhes do que faltou. Isso economiza linhas de código e centraliza a validação.</p>
<h3>Schema para Query Parameters e Path Parameters</h3>
<p>A validação não é apenas para o corpo da requisição:</p>
<pre><code class="language-javascript">const schemaBusca = {
type: 'object',
properties: {
pagina: { type: 'integer', minimum: 1 },
limite: { type: 'integer', minimum: 1, maximum: 100 }
}
};
const schemaId = {
type: 'object',
required: ['id'],
properties: {
id: { type: 'string' }
}
};
fastify.get('/usuarios/:id', {
schema: {
params: schemaId,
querystring: schemaBusca
}
}, async (request, reply) => {
const { id } = request.params;
const { pagina = 1, limite = 10 } = request.query;
return { id, pagina, limite };
});</code></pre>
<p>Validação de <code>params</code> protege contra IDs malformados. Validação de <code>querystring</code> garante que paginação tenha valores sensatos. Tudo automático e sem ifs aninhados.</p>
<h2>Performance na Prática</h2>
<h3>Benchmarks Reais</h3>
<p>Fastify historicamente processa 2-3x mais requisições por segundo que Express em benchmarks como TechEmpower. Isso vem de várias otimizações: parsing eficiente, roteamento otimizado via <code>find-my-way</code> e validação lazy (aplica schema apenas quando necessário).</p>
<p>Para medir sua aplicação, use ferramentas como <code>autocannon</code>:</p>
<pre><code class="language-bash">npm install -g autocannon
autocannon http://localhost:3000 -c 100 -d 30</code></pre>
<p>Isto executa 100 conexões simultâneas por 30 segundos. Você verá requisições por segundo, latência e throughput. Mesmo uma API simples em Fastify bate Express em até 40% de diferença.</p>
<h3>Compressão e Caching</h3>
<p>Ative compressão automática com um plugin:</p>
<pre><code class="language-javascript">import compress from '@fastify/compress';
await fastify.register(compress);</code></pre>
<p>Respostas serão comprimidas com gzip automaticamente. Para cache, use headers HTTP:</p>
<pre><code class="language-javascript">fastify.get('/dados-estaticos', async (request, reply) => {
reply.header('Cache-Control', 'public, max-age=3600');
return { data: 'valor' };
});</code></pre>
<p>Browsers e proxies respectarão o header, reduzindo requisições ao servidor. Combine compressão, validação eficiente e headers apropriados e você tem uma API de alta performance.</p>
<h2>Conclusão</h2>
<p>Fastify oferece três vantagens decisivas: <strong>performance nativa</strong> através de arquitetura otimizada, <strong>validação robusta</strong> com JSON Schema integrado eliminando validação manual, e <strong>escalabilidade via plugins</strong> mantendo código limpo mesmo em projetos complexos. Se você trabalha com APIs críticas onde latência importa, ou simplesmente quer melhores práticas desde o início, Fastify é a escolha certa. O investimento em aprender JSON Schema como forma de contrato é tempo bem gasto que se repete em todo projeto futuro.</p>
<h2>Referências</h2>
<ul>
<li><a href="https://www.fastify.io/" target="_blank" rel="noopener noreferrer">Documentação Oficial Fastify</a></li>
<li><a href="https://json-schema.org/" target="_blank" rel="noopener noreferrer">JSON Schema Official Specification</a></li>
<li><a href="https://www.fastify.io/docs/latest/Plugins/" target="_blank" rel="noopener noreferrer">Fastify Plugin System</a></li>
<li><a href="https://www.techempower.com/benchmarks/" target="_blank" rel="noopener noreferrer">TechEmpower Web Framework Benchmarks</a></li>
<li><a href="https://github.com/goldbergyoni/nodebestpractices" target="_blank" rel="noopener noreferrer">Node.js Best Practices</a></li>
</ul>