Um servidor eficiente implica em baixo custo de infraestrutura, uma melhor capacidade de resposta sob carga e usuários felizes. Como lidar eficientemente com os recursos do servidor, provendo o maior número de requisições possível, sem sacrificar validações de segurança e desenvolvimento prático?
Conheça o Fastify. Fastify é um framework web focado em prover a melhor experiência de desenvolvimento com a mínima "dor de cabeça" e com uma poderosa arquitetura de plugins. Inspirado por Hapi e Express, contudo, até onde sabemos, é um dos web frameworks mais rápido do ecossistema node.
Instalando com npm:
npm i fastify --save
Instalando com yarn:
yarn add fastify
// Importando o framework e instancializando.
const fastify = require('fastify')({
logger: true
})
// Declarando uma rota
fastify.get('/', (request, reply) => {
reply.send({ hello: 'world' })
})
// Inicia o servidor na porta 3000!
fastify.listen(3000, (err, address) => {
if (err) throw err
fastify.log.info(`Servidor respondendo no endereço ${address}`)
})
usando async-await:
const fastify = require('fastify')({
logger: true
})
fastify.get('/', async (request, reply) => {
reply.type('application/json').code(200)
return { hello: 'world' }
})
fastify.listen(3000, (err, address) => {
if (err) throw err
fastify.log.info(`Servidor respondendo no endereço ${address}`)
})
Quer conhecer melhor? Acesse: Aquecendo
.
Boas ferramentas agilizam e facilitam a manutenabilidade do desenvolvimento de APIs para não ter que fazer tudo manualmente.
O Fastify CLI é uma ferramenta, via linha de comando, que ajuda na criação de novos projetos, gerenciamento de plugins, realizam uma variedade de tarefas de desenvolvimento enquanto testam e executam a aplicação.
O objetivo desse guia é construir e executar um projeto Fastify simples, usando o Fastify CLI, estabelecendo Boas Práticas recomendadas que beneficiam todo e qualquer projeto Fastify.
Abra um terminal.
Instale o Fastify CLI:
npm install fastify-cli --global
Crie um novo projeto padrão, executando o comando abaixo: Generate a new project and default app by running the following command:
fastify generate
Para mais informações, veja a documentação Fastify CLI (English).
O código-fonte do Fastify's v1.x está na Branch 1.x, assim sendo, todas as alterações relacionadas ao Fastify 1.x devem se basear na branch 1.x
.
.listen
restringe ao host local,localhost
, interface de rede padrão (127.0.0.1
or::1
, a depender das configurações do sistema operacional). Se você está utilizando o Fastify em um container (Docker, GCP, etc.), você provavelmente deverá passar como parâmetro de restrição0.0.0.0
. Tenha cuidado ao decidir em escutar em todas as interfaces de rede; esta configuração vem com riscos de segurança (english) inerentes. Veja a documentação para mais informações.
- Alto desempenho: até onde sabemos, Fastify é um dos mais rápidos web frameworks 'na área', dependendo da complexidade do código, com o Fastify, você pode servir mais de 76 mil requisições por segundo.
- Extensível: Fastify é completamente extensível via hooks, plugins e decorators.
- Baseado em Schema: mesmo não sendo obrigatório, recomendamos o uso de JSON Schema para validar suas rotas e serializar seus retornos, internamente o Fastify compila o schema em funções de alto desempenho.
- Logging: logs são extremamente importantes mas são dispendiosos; escolhemos o melhor logger para quase remover esse 'custo', Pino!
- Amigável ao Desenvolvedor: o framework foi construido para ser significante ao mesmo tempo que realmente ajuda o desenvolvedor no uso dia após dia, sem sacrificar desempenho ou segurança.
Hardware: EX41S-SSD, Intel Core i7, 4Ghz, 64GB RAM, 4C/8T, SSD.
Metodologia:: autocannon -c 100 -d 40 -p 10 localhost:3000
* 2, obtendo a estimativa por segundo
Framework | Versão | Router? | Requisições/seg |
---|---|---|---|
hapi | 18.1.0 | ✓ | 29,998 |
Express | 4.16.4 | ✓ | 38,510 |
Restify | 8.0.0 | ✓ | 39,331 |
Koa | 2.7.0 | ✗ | 50,933 |
Fastify | 2.0.0 | ✓ | 76,835 |
- | |||
http.Server |
10.15.2 | ✗ | 71,768 |
Benchmarks utilizando https://github.com/fastify/benchmarks. Este é um sintético, "hello world" benchmark que visa avalia a capacidade do framework. A capacidade que cada framework tem depende na sua aplicação, você deve sempre avaliar se capacidade de resposta importa para você.
'Aquecendo'
✓Server
✓Routes
✓Logging
✓Middleware
✓Hooks
✓Decorators
✓Validação e Serialização
✓Fluent Schema
✓Ciclo de vida
✓Resposta
Requisição
Erros
Conversor de Content Type
Plugins
Testando
Benchmarking
Como escrever um bom plugin
✓Guia de Plugins
HTTP2
LTS - Suporte de longo prazo
TypeScript e suporte a tipagem
Sem servidor
- Core - Plugins mantidos pela equipe Fastify team.
- Comunidade - Plugins mantidos pela Comunidade.
- Exemplos (English) - Multirepo com um conjunto de exemplos funcionais reais.
Fastify é o resultado do trabalho de uma comunidade maravilhosa. Os membros da equipe é listado em ordem alfabética.
Líderes mantenedores:
- Matteo Collina, https://twitter.com/matteocollina, https://www.npmjs.com/~matteo.collina
- Tomas Della Vedova, https://twitter.com/delvedor, https://www.npmjs.com/~delvedor
- Tommaso Allevi, https://twitter.com/allevitommaso, https://www.npmjs.com/~allevo
- Ethan Arrowood, https://twitter.com/arrowoodtech, https://www.npmjs.com/~ethan_arrowood
- Matteo Collina, https://twitter.com/matteocollina, https://www.npmjs.com/~matteo.collina
- Tomas Della Vedova, https://twitter.com/delvedor, https://www.npmjs.com/~delvedor
- Dustin Deus, https://twitter.com/dustindeus, https://www.npmjs.com/~starptech
- Denis Fäcke, https://twitter.com/serayaeryn, https://www.npmjs.com/~serayaeryn
- Luciano Mammino, https://twitter.com/loige, https://www.npmjs.com/~lmammino
- Cemre Mengu, https://twitter.com/cemremengu, https://www.npmjs.com/~cemremengu
- Manuel Spigolon, https://twitter.com/manueomm, https://www.npmjs.com/~eomm
- James Sumners, https://twitter.com/jsumners79, https://www.npmjs.com/~jsumners
- Matteo Collina, https://twitter.com/matteocollina, https://www.npmjs.com/~matteo.collina
- Tomas Della Vedova, https://twitter.com/delvedor, https://www.npmjs.com/~delvedor
- Manuel Spigolon, https://twitter.com/manueomm, https://www.npmjs.com/~eomm
Grandes colaboradores em áreas específicas no ecossistema Fastify seráo convidados a se juntar a este grupo pelos Líderes Mantenedores.
- Luciano Mammino, https://twitter.com/loige, https://www.npmjs.com/~lmammino
- Evan Shortiss, https://twitter.com/evanshortiss, https://www.npmjs.com/~evanshortiss
Já contribuiram
- Çağatay Çalı, https://twitter.com/cagataycali, https://www.npmjs.com/~cagataycali
- Trivikram Kamat, https://twitter.com/trivikram, https://www.npmjs.com/~trivikr
- Nathan Woltman, https://twitter.com/NathanWoltman, https://www.npmjs.com/~nwoltman
Atualmente somos um projeto incubado (English) na OpenJS Foundation.
Este projeto é bondosamente patrocinado por:
Já patrocinaram:
Licenciado sob a licença MIT (English).
Para sua comodidade, aqui está a lista de todas as licenças das bibliotecas de produção utilizadas:
- MIT
- ISC
- BSD-3-Clause
- BSD-2-Clause