Este projeto é um servidor de mock (simulação) de APIs desenvolvido em Node.js. Ele permite criar APIs virtuais a partir de arquivos JSON ou YAML, simulando requisições e respostas HTTP sem a necessidade de um backend real. É ideal para testes de integração, desenvolvimento frontend e cenários onde você precisa simular comportamentos de APIs.
- Criação de APIs Virtuais: Defina rotas, métodos HTTP, headers, query parameters, body e respostas diretamente em arquivos JSON ou YAML.
- Suporte a Métodos HTTP: GET, POST, PUT, DELETE.
- Validação de Requisições: Valida headers, query parameters, body e parâmetros de rota com base no mock definido.
- Suporte a Parâmetros Dinâmicos: Use parâmetros dinâmicos nas rotas (ex:
/users/:id). - Suporte a Query Parameters: Defina e valide query parameters nas requisições.
- Validação de Schema: Valida o corpo da requisição usando JSON Schema.
- Rate Limiting: Limita o número de requisições por IP para evitar abuso.
- CORS: Habilita CORS (Cross-Origin Resource Sharing) para permitir requisições de diferentes origens.
- Logs Detalhados: Exibe logs detalhados das requisições recebidas e respostas enviadas.
O servidor lê arquivos JSON ou YAML de uma pasta chamada mocks. Cada arquivo define uma rota, um método HTTP e a resposta esperada. O nome do arquivo segue o padrão:
(nome-da-rota)-(metodo-http).json
Exemplo:
get-users-(id)-get.json: Define uma rota GET para /users/:id.
post-users-post.json: Define uma rota POST para /users.
O servidor carrega automaticamente todos os arquivos da pasta mocks e configura as rotas correspondentes.
-
Clone o repositório:
git clone https://github.com/robinhosz/mock-api-server.git cd mock-api-server -
Instale as dependências:
npm install
-
Crie a pasta
mocks:Dentro do projeto, crie uma pasta chamada
mockse adicione subpastas para cada branch/ambiente (ex:main,develop). -
Adicione arquivos de mock:
Crie arquivos JSON ou YAML dentro das pastas de branch para definir as rotas e respostas.
-
Inicie o servidor:
node server.js
O servidor estará disponível em http://localhost:3000.
Arquivo: get-users-(id)-get.json
{
"request": {
"params": {
"id": "123"
}
},
"response": {
"status": 200,
"body": {
"id": "123",
"name": "John Doe",
"email": "[email protected]"
}
}
}Arquivo: post-users.json
{
"request": {
"body": {
"name": "Jane Doe",
"email": "[email protected]",
"age": 30
},
"headers": {
"Authorization": "Bearer abc123"
}
},
"response": {
"status": 201,
"body": {
"message": "User created successfully",
"userId": "456"
}
}
}Arquivo: put-users-(id).json
{
"request": {
"params": {
"id": "456"
},
"body": {
"name": "Jane Doe Updated",
"age": 31
}
},
"response": {
"status": 200,
"body": {
"message": "User updated successfully"
}
}
}Arquivo: delete-users-(id).json
{
"request": {
"params": {
"id": "456"
}
},
"response": {
"status": 204
}
}Arquivo: post-products.json
{
"request": {
"body": {
"name": "Tablet",
"price": 299.99
},
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"price": { "type": "number" }
},
"required": ["name", "price"]
}
},
"response": {
"status": 201,
"body": {
"message": "Product created successfully",
"productId": "789"
}
}
}Arquivo: get-products.json
{
"request": {
"query": {
"category": "electronics"
}
},
"response": {
"status": 200,
"body": [
{
"id": 1,
"name": "Smartphone",
"price": 599.99
},
{
"id": 2,
"name": "Laptop",
"price": 1299.99
}
]
}
}Contribuições são bem-vindas! Por favor, leia as diretrizes detalhadas no arquivo CONTRIBUTING.md.
Este projeto está licenciado sob a GNU General Public License v3.0.