Tip
This project is archived. The website can be browsed using automatic translators like Google Translate.
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.
.listenrestringe ao host local,localhost, interface de rede padrão (127.0.0.1or::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✓RespostaRequisiçãoErrosConversor de Content TypePluginsTestandoBenchmarkingComo escrever um bom plugin✓Guia de PluginsHTTP2LTS - Suporte de longo prazoTypeScript e suporte a tipagemSem 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

