Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kitabisa/smockr
Supple mock server with flexible on-demand response and optional get random fake data using Faker.js
https://github.com/kitabisa/smockr
backend bun cli frontend mock mocking tools
Last synced: 4 months ago
JSON representation
Supple mock server with flexible on-demand response and optional get random fake data using Faker.js
- Host: GitHub
- URL: https://github.com/kitabisa/smockr
- Owner: kitabisa
- License: mit
- Created: 2024-03-18T20:27:39.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-09-25T19:58:45.000Z (4 months ago)
- Last Synced: 2024-10-08T17:51:18.012Z (4 months ago)
- Topics: backend, bun, cli, frontend, mock, mocking, tools
- Language: TypeScript
- Homepage: https://npmjs.com/package/@kitabisa/smockr
- Size: 597 KB
- Stars: 2
- Watchers: 5
- Forks: 0
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
Supple mock server with flexible on-demand response and optional get random fake data using Faker.js------
## Features
* Using [Bun](https://github.com/oven-sh/bun)
* Written in [Typescript](https://github.com/microsoft/TypeScript)
* Flexible on-demand response (can modify body, status, headers, and delayed response)
* Optional get random fake data using [Faker.js](https://github.com/faker-js/faker)
* Request body validation using [JSON Schema](https://json-schema.org/learn/miscellaneous-examples)
* No data storage needed## Getting Started
Setup smockr with npm
```
$ npm install -g @kitabisa/smockr
```Setup smockr with bun
```
$ bun add -g @kitabisa/smockr
```Setup smockr with docker
```
$ docker pull kitabisa/smockr
```## Quick Start
### Run with node or bun
Running mock with default params
```
$ smockr
```Running mock with custom params
```
$ smockr \
--port 3000 \
--secret "mysecret" \
--allowOrigin "https://kitabisa.com" \
--allowMethods "GET, POST, PATCH" \
--allowHeaders "Content-Type, Authorization"
```
When you define `secret` as a parameter and is not empty string, the client request must be include `X-Smockr-Secret` header with the same valueSee a list of all available options
```
$ smockr --help
```See a installed version
```
$ smockr --version
```### Run with docker
Running mock with default params
```
$ docker run -p 8080:8080 --rm \
kitabisa/smockr
```Running mock with custom params
```
$ docker run -p 3000:8080 --rm \
-e SECRET_KEY="mysecret" \
-e ALLOWED_ORIGIN="https://kitabisa.com" \
-e ALLOWED_METHODS="GET, POST, PATCH" \
-e ALLOWED_HEADERS="Content-Type, Authorization" \
kitabisa/smockr
```## Usage
### Body
Specify a search body param to retrieve a response with that body.
```http
GET http://localhost:8080/?mock[response][body]={"ping":"pong"}HTTP/1.1 200 OK
content-type: application/json
content-length: 18{
"ping": "pong"
}
```Specify a search body param with random fake data using [faker.js api helpers fake](https://fakerjs.dev/api/helpers#fake).
```http
GET http://localhost:8080/?mock[response][body]={"id":{{number.int({"min":100000,"max":900000})}},"name":"{{person.fullName}}","avatar":"{{image.avatar}}"}HTTP/1.1 200 OK
content-type: application/json
content-length: 107{
"id": 429178,
"name": "Allen Brown",
"avatar": "https://avatars.githubusercontent.com/u/97165289"
}
```### Status
Specify a search status param get back that code status. The status must be
inside the range 200 to 599.```http
GET http://localhost:8080/?mock[response][status]=301HTTP/1.1 301 Moved Permanently
content-type: application/json
content-length: 0
```### Headers
Specify a search headers param as json string to get them back.
```http
GET http://localhost:8080/?mock[response][headers]={"x-hello":"world"}HTTP/1.1 200 OK
content-type: application/json
content-length: 0
x-hello: world
```### Delay
Specify a search delay param in milliseconds in order to delay the response.
```http
GET http://localhost:8080/?mock[response][delay]=3000HTTP/1.1 200 OK
content-type: application/json
content-length: 0
```### Schema Validation
Specify a search schema validation in json schema (stringify) to set request body validation.
```http
POST http://localhost:8080/?mock[request][body][schema]={"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","minimum":17}},"required":["name"]}{
"age": 20
}HTTP/1.1 400 Bad Request
content-type: application/json
content-length: 84{
"code": 400,
"message": "Requires property name",
"type": "SchemaValidationException"
}
```### Health check
Predefined health check route.
```http
GET http://localhost:8080/health-checkHTTP/1.1 200 OK
content-type: application/json
content-length: 24{
"health_check": "up"
}
```## Caveats
Some cases in production server, there may be problems related to `Request-URI too large`. If you are using kubernetes ingress, try to apply this configuration:
```yml
annotations:
nginx.ingress.kubernetes.io/client-header-buffer-size: 100k
nginx.ingress.kubernetes.io/large-client-header-buffers: 4 100k
nginx.ingress.kubernetes.io/server-snippet: |
client_header_buffer_size 100k;
large_client_header_buffers 4 100k;
```## Contributing
Want to contribute? Awesome! You can find information about contributing to
this project in the [CONTRIBUTING.md](https://github.com/kitabisa/smockr/blob/main/CONTRIBUTING.md)