Build a fake backend by providing the content of JSON files or JavaScript objects through configurable routes.
It actually can serve the content of other file types as well as sending the files itself as response.
Comes as a Node.js server. Useful for mocking, testing and developing independent of the »real« backend.
Sorry, this project is unmaintained 😢Thanks to all contributors for your work!
We’ve just pushed a last release which fixes some bugs, make this thing run with Node 18.
Let’s say you need an endpoint like http://localhost:8081/api/example which should return:
It’s a matter of seconds to create this endpoint with help of this little hapi server.
It might take a few seconds longer as setting up the well-made JSON Server but it’s way more flexible.
git clone https://github.com/micromata/http-fake-backend.git npm install
Or with help of Yeoman
npm install -g yo npm install -g generator-http-fake-backend
This comes in handy, because the Yeoman generator has a sub-generator to setup endpoints of your fake backend very convenient. See https://github.com/micromata/generator-http-fake-backend.
The server runs at http://localhost:8081/ providing a page with links to all existing API endpoints.
There are the following two options.
This way the server uses nodemon
to restart itself on changes.
Just starts the server via node.
Each endpoint needs a configuration file in /server/api/
to define routes, http method and the response.
/server/api/simpleExample.js
:
module.exports = SetupEndpoint({ name: 'simpleExample', urls: [{ requests: [ { response: '/response-files/simpleExample.json' } ] }] });
/server/api/anotherExample.js
:
module.exports = SetupEndpoint({ name: 'anotherExample', urls: [{ params: '/read', requests: [{ method: 'GET', response: '/response-files/anotherExample.json' }] }, { params: '/update/{id}', requests: [{ method: ['PUT', 'PATCH'], response: { success: true } }, { method: 'DELETE', response: { deleted: true } }] }, ] });Serving different content types
/server/api/fileTypes.js
:
module.exports = SetupEndpoint({ name: 'fileTypes', urls: [{ params: '/json', requests: [{ response: '/response-files/simpleExample.json' }] }, { params: '/text', requests: [{ response: '/response-files/example.txt', mimeType: 'text/plain' }] }, { params: '/html', requests: [{ response: '/response-files/example.html', mimeType: 'text/html' }] }, { params: '/pdf', requests: [{ response: '/response-files/example.pdf', sendFile: true }] }] });Faking HTTP errors and status code
/server/api/fakingStatusCodes.js
:
module.exports = SetupEndpoint({ name: 'statusCodes', urls: [ { params: '/boomError', requests: [{ // Returns a 402 status code + error message provided by boom: // { // "error" : "Payment Required", // "message" : "Payment Required", // "statusCode" : 402 // } statusCode: 402 }] }, { params: '/customError', requests: [{ // Returns a HTTP status code 406 and a self defined response: response: { error: true }, statusCode: 406 }] }, { params: '/regularResponse', requests: [{ // Returns a 401 error provided by boom // as defined on endpoint level response: '/response-files/anotherExample.json' }] } ], statusCode: 401 });
The configuration object in Detail:
name
urls
urls.params
params: '/update/{id}'
urls.requests
urls.requests.method
GET
when not defined.string
, or array
of strings.urls.requests.response
response: '/response-files/articles.json'
response: { success: true }
urls.requests.mimeType
application/json
.content-type
response header.urls.requests.sendFile
false
.urls.requests.statusCode
200
statusCode
The main config is handled via a file named .env
with the following content:
# NODE_ENV # Could be either `development` or `production` NODE_ENV=development # Port of the Server SERVER_PORT=8081 # Port for running the tests TEST_PORT=9090 # URL Prefix for the endpoints # eg. http://localhost:8081/api/foo API_PREFIX=/api # Custom response header #CUSTOM_HEADER_NAME=Authorization #CUSTOM_HEADER_VALUE=Bearer eyJhbGciOiJIUzUxMiJ9
Please be aware of the licenses of the components we use in this project. Everything else that has been developed by the contributions to this project is under MIT License.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4