Documentação — Fake API
Guia conciso para instalar, configurar e usar a API. Explore os cartões abaixo ou pesquise direto a seção desejada.
Guia conciso para instalar, configurar e usar a API. Explore os cartões abaixo ou pesquise direto a seção desejada.
Clone, instale e rode em minutos.
Variáveis e padrões importantes.
Health, sistema e CRUD dinâmico.
Login fake, token, roles e scopes.
Paginação, meta e busca textual.
Estrutura e separação de camadas.
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
| 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. |
AUTH_ENABLED | false | Ativa o modo Mock JWT (quando true exige Bearer em rotas protegidas). |
AUTH_JWT_SECRET | dev-secret | Segredo para assinar/verificar JWT. |
AUTH_TOKEN_TTL | 1h | Validade do token (ex.: 15m, 1h, 7d). |
POST /auth/login — login fake; retorna { token, user }POST /auth/refresh — renova token fake; retorna novo { token, user }| 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/compat. |
GET /__resources — lista recursos e contagem.GET /_docs — documentação embutida.POST /_ensure/:resource — cria recurso se não existir.POST /_reset — reseta o banco (dev).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 — removeModo opcional para prototipagem e testes. Não usar em produção sem segurança real.
AUTH_ENABLED=true
AUTH_JWT_SECRET=uma_senha_bem_grande_e_secreta
AUTH_TOKEN_TTL=1h
# Opcional
# DB_PATH=./data/db.json
db.json{
"users": [
{ "id": 1, "email": "[email protected]", "name": "Admin", "password": "admin123", "role": "admin", "scopes": ["*:*"] },
{ "id": 2, "email": "[email protected]", "name": "Alice", "password": "alice", "role": "user", "scopes": ["read:*"] }
],
"posts": []
}
curl -sX POST http://localhost:8000/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","password":"admin123"}'
TOKEN="cole_aqui"
curl -s http://localhost:8000/posts -H "Authorization: Bearer $TOKEN"
read:<resource> → GET /:resourcecreate:<resource> → POST /:resourceupdate:<resource> → PUT/PATCH /:resource/:iddelete:<resource> → DELETE /:resource/:idCuringas: read:* (leitura global), *:* (admin total).
_page — página (padrão: 1)_limit — itens por página (padrão: 50, máx.: 100)_meta — metadados de paginação (0 ou 1)q — busca textual em todos os camposGET /posts?q=node&_page=2&_limit=10&_meta=1
curl -s http://localhost:8000/posts | jq
curl -s "http://localhost:8000/posts?q=node&_page=2&_limit=10&_meta=1" | jq
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
200 OK — sucesso201 Created — item criado204 No Content — removido / sem corpo400 Bad Request — parâmetros inválidos401 Unauthorized — token inválido/ausente403 Forbidden — escopo insuficiente404 Not Found — recurso/ID inexistente422 Unprocessable Entity — validação falhou500 Internal Server Error — erro interno503 Service Unavailable — não saudável{
"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,
"email": "[email protected]",
"name": "Admin",
"password": "admin123",
"role": "admin",
"scopes": ["*:*"],
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z"
}
]
}
src/
├─ auth/ # mock JWT (jwt, guard, scopes, req.user)
├─ config/ # app & database config
├─ controllers/ # health, resource, system
├─ middleware/ # cors, logger, validation
├─ routes/ # auth, health, resource, system
├─ services/ # database service
├─ utils/ # file utils
└─ server.js # bootstrap da aplicação
| Caminho | Arquivo | Função |
|---|---|---|
| src/auth | jwt.js | Assina/verifica tokens JWT. |
| src/auth | mw-auth.js | Popula req.user quando Bearer válido. |
| src/auth | guard.js | Exige escopos por rota (403 se faltar). |
| src/auth | crud-policy.js | Mapeia método HTTP → read/create/update/delete. |
| src/auth | user-store-file.js | Lê usuários do db.json. |
| src/routes | auth.routes.js | Endpoints /auth/login e /auth/refresh. |
[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)
{
"error": "Bad Request",
"message": "Invalid ID parameter. ID must be a positive number."
}
/ — home com passos de uso e exemplos/_docs — documentação embutidagit checkout -b feature/minha-featureLicenciado sob MIT. Veja LICENSE.
Não recomendado. É voltado a desenvolvimento, testes e protótipos.
Defina CORS_ORIGIN com suas origens. Evite * fora de dev.