Pular para o conteúdo
Backend

Bun.js REST API: do zero ao CRUD com Elysia

A criar uma API REST real usando Bun.js, ElysiaJS e SQLite, com código moderno, performance absurda e integração nativa. O passo a passo que faltava para quem quer

Por que isso é importante

Bun.js REST API com Elysia + SQLite: bun initbun add elysia → rotas tipadas → t.Object (TypeBox) → bun:sqlite CRUD. Runtime rápido; valide libs nativas antes de migrar produção.

O que você vai construir: REST API com Bun

Você vai construir uma REST API de livros com CRUD: Bun (runtime) + Elysia (rotas tipadas) + bun:sqlite. Do bun init ao teste no Postman/cURL.

Atenção

O Bun.js evolui rápido. Instale sempre a versão estável mais recente para evitar erros
de sintaxe ou de dependências. Consulte a documentação oficial antes de rodar comandos
destrutivos.

Instalar Bun.js e preparar o ambiente

Você precisa do runtime instalado. Para rodar em qualquer SO, execute no terminal: curl -fsSL https://bun.sh/install | bash . Após instalar, reinicie o
terminal. Teste: bun --version .

Instalação falhou?

Se sua máquina não reconhece bun , revise as variáveis de ambiente $PATH ou consulte a documentação oficial.

Iniciando seu Projeto: bun init

Rode bun init na pasta do projeto e preencha os dados. Escolha index.ts como entrada principal. Crie desde já interfaces.ts e db.ts na raiz — organização importa
desde o início.

Dica

Manter uma estrutura organizada acelera a escalabilidade do seu código e evita
retrabalho quando sua API crescer.

ElysiaJS: framework tipado no Bun.js

ElysiaJS é o framework tipado no Bun: bun add elysia, rotas com tipos e validação TypeBox. Minimalista como Express, alinhado ao runtime Bun.

Primeiro código: API básica rodando em minutos

No index.ts , adicione:

Atenção

Sempre use rotas REST em minúsculo, sem acentos. Isso evita que clientes HTTP retornem
erros inesperados.

CRUD REST: rotas tipadas

Defina as rotas clássicas CRUD. O Elysia permite declarar de forma expressiva e enxuta:

Rotas /livros

  • GET /livros — busca todos os livros
  • GET /livros/:id — retorna livro único
  • POST /livros — adiciona novo registro
  • PUT /livros/:id — edita livro
  • DELETE /livros/:id — exclui registro

Validação com t.Object (TypeBox)

No Elysia, valide body/params com TypeBox via t.Object — padrão que tutoriais (Apidog/SimoneCannella) e o curso-bunjs usam. Exemplo ilustrativo:

app.post('/livros', ({ body }) => db.insert(body), { body: t.Object({ titulo: t.String({ minLength: 1 }), ano: t.Number() }) }) — request sem titulo → 422/validação antes do handler. Params: t.Object({ id: t.String() }) no GET /livros/:id.

Escopo deste artigo: CRUD deployável com validação. JWT/auth fica capítulo opcional no curso — não misture OAuth aqui só para alongar.

Scripts: modo dev automático com hot reload

No package.json , acrescente: Rode bun run dev para desenvolvimento. Ajustes refletem em tempo real.

Recarregar rápido?

O hot reload nativo elimina o tempo de espera. Salve e veja alterações na hora.

Defina o modelo: Interface <em>Livro</em> em TypeScript

Em interfaces.ts :

Modelar dados evita bugs

Tipagem forte do TypeScript previne falhas na manipulação dos registros na API. Use e
abuse das interfaces.

bun:sqlite: banco embutido

Instale via bun add bun:sqlite . Em db.ts , crie a
classe BookDB que inicializa a tabela de livros e encapsula métodos de
acesso ao banco. Exemplo:

Evite SQL Injection

Sempre use binds $param em vez de concatenação direta ao construir
queries SQLite no Bun.js.

Integrar: rotas + model + SQLite

Importe o BookDB no index.ts . Para cada rota, chame os
métodos da classe conforme o verbo HTTP e retorne o resultado como JSON. Lembre-se do await em métodos assíncronos.

Status HTTP corretos

Sempre retorne o status correto: 200 para sucesso, 201 para criado, 404 para não
encontrado, 500 para erro interno.

Testando sua API: use Postman, Insomnia ou cURL

Faça requisições GET , POST , PUT e DELETE pelo Postman. Teste: /livros (tudo), /livros/:id (um), e os demais endpoints CRUD com body em JSON.

Erros comuns no Postman

Se criar ou editar não funciona, revise os métodos e corpos das requisições. Muitos
problemas vêm de payload mal formatado (JSON inválido).

Debug: como corrigir erros rápidos em Bun.js

Use console.log intensamente nas rotas e antes dos comandos de acesso
ao banco. O runtime exibe logs detalhados no terminal, acelerando seu diagnóstico.

Banco limpo: não repita dados, controle resets com scripts

Crie scripts especiais para zerar ou popular o banco, assim você evita poluir sua API de
produção com dados dummy ou duplicados durante os testes.

Deploy: deixar a API portátil

Versione books.db para ambientes de desenvolvimento. Para deploy real,
monte um script para criar o banco em cloud ou servidor privado. Planeje variáveis de
ambiente e proteja dados sensíveis.

Próximos passos: curso-bunjs e além

Transforme este projeto base numa API real para sua necessidade — filmes, clientes,
produtos. Poste, compartilhe e assista a mais códigos direto no canal Dev Doido no
YouTube. Aja enquanto está fresco na cabeça!

Aprenda fazendo

Não existe código mágico: só se aprende backend moderno praticando, errando,
refazendo.

Fontes

Revisão em agosto de 2026. Bun.js e Elysia evoluem rápido — APIs de bun init, SQLite e deploy mudam por versão. Tutorial de API REST; valide no changelog do dia.

Bun docs. Elysia. Bun — SQLite.

Perguntas frequentes

Como criar uma REST API com Bun.js?

Rode bun init, defina rotas HTTP (ex.: Elysia), valide body com schema tipado e persista com bun:sqlite ou outro DB. Depois auth e deploy.

O que é ElysiaJS?

Framework web para Bun com rotas tipadas e validação (TypeBox). Combina bem com bun:sqlite para CRUD rápido em TypeScript.

Bun substitui Node.js?

Em muitos APIs e scripts, sim. Libs com addons nativos Node podem falhar — cheque compatibilidade antes de migrar produção.

Dá para usar SQLite com Bun e Elysia?

Sim via bun:sqlite: abra o DB, decorate no app Elysia e faça CRUD nas rotas. Bom para MVP; migre para Postgres se precisar multi-instância.

Continue explorando

Perguntas frequentes

Como criar uma REST API com Bun.js?

Rode bun init, defina rotas HTTP (ex.: Elysia), valide body com schema tipado e persista com bun:sqlite ou outro DB. Depois auth e deploy.

O que é ElysiaJS?

Framework web para Bun com rotas tipadas e validação (TypeBox). Combina bem com bun:sqlite para CRUD rápido em TypeScript.

Bun substitui Node.js?

Em muitos APIs e scripts, sim. Libs com addons nativos Node podem falhar — cheque compatibilidade antes de migrar produção.

Dá para usar SQLite com Bun e Elysia?

Sim via bun:sqlite: abra o DB, decorate no app Elysia e faça CRUD nas rotas. Bom para MVP; migre para Postgres se precisar multi-instância.

O que você vai construir: REST API com Bun

Você vai construir uma REST API de livros com CRUD: Bun (runtime) + Elysia (rotas tipadas) + bun:sqlite. Do `bun init` ao teste no Postman/cURL.