Documentação — Fake API
API RESTful completa e flexível em Node.js + Express, com arquitetura limpa e separação de responsabilidades. Ideal para protótipos, testes e simulação de contratos REST.
Escolhas padrão
- • Gerenciador: npm
- • Porta: 8000
- • Banco:
./data/db.json
- • CORS: liberado em dev, restrito em prod
Instalação rápida
git clone https://github.com/samuelikz/fakeapi.git
cd fakeapi
npm install
cp env.example .env
# ajuste as variáveis conforme necessário
npm run dev # http://localhost:8000
# ou:
npm run build && npm start
Configuração (.env)
Crie o arquivo .env
a partir de env.example
e ajuste conforme seu ambiente:
Variável | Padrão | Descrição |
---|---|---|
NODE_ENV | development | Ambiente de execução. |
PORT | 8000 | Porta HTTP. |
DB_PATH | ./data/db.json | Arquivo JSON do banco. |
CORS_ORIGIN | * (dev) | Origens permitidas via CORS. |
Endpoints
Health
Método | Endpoint | Descrição |
---|---|---|
GET | /health | Health básico. |
GET | /health/detailed | Detalhes de sistema, app e banco. |
GET | /health/ping | Ping simples (pong). |
GET | /health/ready | Readiness (pronto p/ tráfego). |
GET | /health/live | Liveness. |
GET | /_health | Alternativo/compatibilidade. |
Sistema
GET /__resources
— lista recursos e contagem.GET /_docs
— documentação embutida.POST /_ensure/:resource
— cria um recurso caso não exista.POST /_reset
— reseta o banco (dev).
CRUD dinâmico
Para qualquer recurso (ex.: posts
, users
):
GET /:resource
— lista com paginação/filtrosGET /:resource/:id
— obtém itemPOST /:resource
— cria itemPUT /:resource/:id
— atualiza totalPATCH /:resource/:id
— atualiza parcialDELETE /:resource/:id
— remove
Parâmetros de consulta
_page
— página (padrão: 1)_limit
— itens por página (padrão: 50, máximo: 100)_meta
— inclui metadados de paginação (0
ou1
)q
— busca textual em todos os campos
Exemplos (curl)
GET /posts
curl -s http://localhost:8000/posts | jq
Busca + paginação
curl -s "http://localhost:8000/posts?q=node&_page=2&_limit=10&_meta=1" | jq
POST /posts
curl -s -X POST http://localhost:8000/posts \
-H 'Content-Type: application/json' \
-d '{"title":"Bem-vindo à Fake API","content":"API RESTful com arquitetura limpa.","author":"Samuel","tags":["api","rest","nodejs"]}' | jq
PUT /posts/1
curl -s -X PUT http://localhost:8000/posts/1 \
-H 'Content-Type: application/json' \
-d '{"title":"Título atualizado","content":"Conteúdo atualizado","author":"Samuel"}' | jq
PATCH /posts/1
curl -s -X PATCH http://localhost:8000/posts/1 \
-H 'Content-Type: application/json' \
-d '{"title":"Apenas o título"}' | jq
DELETE /posts/1
curl -s -X DELETE http://localhost:8000/posts/1 -i
Status Codes
200
OK — sucesso201
Created — item criado204
No Content — removido / sem corpo400
Bad Request — parâmetros inválidos404
Not Found — recurso/ID inexistente422
Unprocessable Entity — validação falhou500
Internal Server Error — erro interno503
Service Unavailable — não saudável
Estrutura do banco
{
"posts": [
{
"id": 1,
"title": "Bem-vindo à Fake API",
"content": "Esta é uma API RESTful completa com arquitetura limpa e separação de responsabilidades.",
"author": "Samuel",
"tags": ["api","rest","nodejs"],
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z"
}
],
"users": [
{
"id": 1,
"name": "João Silva",
"email": "[email protected]",
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z"
}
]
}
Arquitetura
src/
├─ config/ # app & database config
├─ controllers/ # health, resource, system
├─ middleware/ # cors, logger, validation
├─ routes/ # health, resource, system
├─ services/ # database service
├─ utils/ # file utils
└─ server.js # bootstrap da aplicação
Logs & Erros
[2024-01-01T00:00:00.000Z] GET /posts - Started
[2024-01-01T00:00:00.000Z] 🟢 GET /posts -> 200 (15ms)
[2024-01-01T00:00:00.000Z] 🔴 POST /posts -> 400 (8ms)
[2024-01-01T00:00:00.000Z] 💚 GET /health -> 200 (5ms)
Exemplo de erro padronizado:
{
"error": "Bad Request",
"message": "Invalid ID parameter. ID must be a positive number."
}
Interface Web
/
— home com passos de uso e exemplos/_docs
— documentação embutida
Contribuindo
- Faça fork do repositório
- Crie branch:
git checkout -b feature/minha-feature
- Commits descritivos e testes
- Abra um Pull Request
Licença
Licenciado sob MIT. Veja LICENSE
.
FAQ
Posso usar em produção?
Não recomendado. É voltado a desenvolvimento, testes e protótipos.
Como restringir CORS?
Defina CORS_ORIGIN
com suas origens. Evite *
fora de dev.