Package Exports
- json-server
- json-server/package.json
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (json-server) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
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.
- Egghead.io free video tutorial - Creating demo APIs with json-server
- JSONPlaceholder - Live running version
See also hotel, a simple process manager for developers.
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.jsonNow 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 and safely saved to db.json using lowdb.
Install
$ npm install -g json-serverRoutes
Based on the previous db.json file, here are all the default routes. You can also add other routes using --routes.
GET /posts
GET /posts/1
GET /posts/1/comments
POST /posts
PUT /posts/1
PATCH /posts/1
DELETE /posts/1To filter resources (use . to access deep properties)
GET /posts?title=json-server&author=typicode
GET /comments?author.name=typicodeTo 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=30To sort resources, add _sort and _order (ascending order by default).
GET /posts?_sort=views&_order=DESC
GET /posts/1/comments?_sort=votes&_order=ASCTo make a full-text search on resources, add q.
GET /posts?q=internetTo embed other resources, add _embed.
GET /posts/1?_embed=commentsReturns database.
GET /dbReturns default index file or serves ./public directory.
GET /Extras
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.jsonAccess 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/dbGenerate random data
Using JS instead of a JSON file, you can create data programmatically.
// index.js
module.exports = function() {
var data = { users: [] }
// Create 1000 users
for (var i = 0; i < 1000; i++) {
data.users.push({ id: i, name: 'user' + i })
}
return data
}$ json-server index.jsTip use modules like faker, casual or chance.
Add routes
Create a routes.json file.
{
"/api/": "/",
"/blog/:resource/:id/show": "/:resource/:id"
}Start JSON Server with --routes option.
json-server db.json --routes routes.jsonNow you can access resources using additional routes.
/api/posts
/api/posts/1
/blog/posts/1/showModule
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')
// Returns an Express server
var server = jsonServer.create()
// Set default middlewares (logger, static, cors and no-cache)
server.use(jsonServer.defaults)
// Returns an Express router
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 modify responses, use router.render():
// In this example, returned resources will be wrapped in a body property
router.render = function (req, res) {
res.jsonp({
body: res.locals.data
})
}To add rewrite rules, use jsonServer.rewriter():
// Add this before server.use(router)
server.use(jsonServer.rewriter({
'/api/': '/',
'/blog/:resource/:id/show': '/:resource/:id'
}))Alternatively, you can also mount the router on another path.
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
- Node Module Of The Week - json-server
- Mock up your REST API with JSON Server
- how to build quick json REST APIs for development
- ng-admin: Add an AngularJS admin GUI to any RESTful API
- Fast prototyping using Restangular and Json-server
Projects
License
MIT - Typicode