JSON Server
Get a full fake REST API with zero coding in less than 30 seconds (seriously)
Created with <3 for front-end developers who need a quick back-end for prototyping and mocking.
Example
Create a db.json
file
{
"posts": [
{ "id": 1, "title": "json-server", "author": "typicode" }
],
"comments": [
{ "id": 1, "body": "some comment", "postId": 1 }
]
}
Start JSON Server
$ json-server --watch db.json
Now if you go to http://localhost:3000/posts/1, you'll get
{ "id": 1, "title": "json-server", "author": "typicode" }
Also, if you make POST, PUT, PATCH or DELETE requests, changes will be automatically saved to db.json
using lowdb.
Routes
Based on the previous db.json
file, here are all the default routes. You can also add other routes.
GET /posts
GET /posts/1
GET /posts/1/comments
GET /posts?title=json-server&author=typicode
POST /posts
PUT /posts/1
PATCH /posts/1
DELETE /posts/1
To slice resources, add _start
and _end
or _limit
(an X-Total-Count
header is included in the response).
GET /posts?_start=20&_end=30
GET /posts/1/comments?_start=20&_end=30
To sort resources, add _sort
and _order
(ascending order by default).
GET /posts?_sort=views&_order=DESC
GET /posts/1/comments?_sort=votes&_order=ASC
To make a full-text search on resources, add q
.
GET /posts?q=internet
To embed other resources, add _embed
.
GET /posts/1?_embed=comments
Returns database.
GET /db
Returns default index file or serves ./public
directory.
GET /
Install
$ npm install -g json-server
Static file server
You can use JSON Server to serve your HTML, JS and CSS, simply create a ./public
directory.
mkdir public
echo 'hello word' > public/index.html
json-server db.json
Access from anywhere
You can access your fake API from anywhere using CORS and JSONP.
Remote schema
You can load remote schemas.
$ json-server http://example.com/file.json
$ json-server http://jsonplaceholder.typicode.com/db
JS file support
You can create data programmatically.
Tip use modules like faker or casual.
module.exports = function() {
var data = { users: [] }
for (var i = 0; i < 1000; i++) {
data.users.push({ id: i, name: 'user' + i })
}
return data
}
$ json-server index.js
Add routes
Create a routes.json
file.
{
"/api/:resource": "/:resource",
"/api/:resource/:id": "/:resource/:id",
"/api/:parent/:parentId/:resource": "/:parent/:parentId/:resource",
"/blog/posts/:id/show": "/posts/:id"
}
Start JSON Server with --routes
option.
json-server db.json --routes routes.json
Now you can access resources using additional routes.
/api/posts/1 -> /posts/1
/blog/posts/1/show -> /posts/1
Module
If you need to add authentication, validation, you can use the project as a module in combination with other Express middlewares.
var jsonServer = require('json-server')
var server = jsonServer.create()
server.use(jsonServer.defaults)
var router = jsonServer.router('db.json')
server.use(router)
server.listen(3000)
For an in-memory database, you can pass an object to jsonServer.router()
.
Please note also that jsonServer.router()
can be used in existing Express projects.
To add rewrite rules:
server.use(jsonServer.rewriter({
'/api/:resource': '/:resource',
})
To set a global prefix:
server.use('/api', router)
Deployment
You can deploy JSON Server. For example, JSONPlaceholder is an online fake API powered by JSON Server and running on Heroku.
Links
Video
Articles
Projects
License
MIT - Typicode