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 process manager for web developers.
Example
Create a db.json
file
Start JSON Server
$ json-server --watch db.json
Now if you go to http://localhost:3000/posts/1, you'll get
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-server
Routes
Based on the previous db.json
file, here are all the default routes. You can also add other routes using --routes
.
Plural routes
GET /posts
GET /posts/1
POST /posts
PUT /posts/1
PATCH /posts/1
DELETE /posts/1
Singular routes
GET /profile
POST /profile
PUT /profile
PATCH /profile
Filter
Use .
to access deep properties
GET /posts?title=json-server&author=typicode
GET /posts?id=1&id=2
GET /comments?author.name=typicode
Slice
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
GET /posts/1/comments?_start=20&_limit=10
Sort
Add _sort
and _order
(ascending order by default)
GET /posts?_sort=views&_order=DESC
GET /posts/1/comments?_sort=votes&_order=ASC
Operators
Add _gte
or _lte
for getting a range
GET /posts?views_gte=10&views_lte=20
Add _ne
to exclude a value
GET /posts?id_ne=1
Add _like
to filter using RegExp
GET /posts?title_like=server
Full-text search
Add q
GET /posts?q=internet
Relationships
To include children resources, add _embed
GET /posts?_embed=comments
GET /posts/1?_embed=comments
To include parent resource, add _expand
GET /comments?_expand=post
GET /comments/1?_expand=post
To get or create nested resources (by default one level, add routes for more)
GET /posts/1/comments
POST /posts/1/comments
Database
GET /db
Homepage
Returns 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
or use --static
.
mkdir publicecho 'hello word' > public/index.htmljson-server db.json
json-server db.json --static ./static
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
Generate random data
Using JS instead of a JSON file, you can create data programmatically.
// index.jsmodule { var data = users: // Create 1000 users for var i = 0; i < 1000; i++ datausers return data}
$ json-server index.js
Tip use modules like faker, casual or chance.
Add routes
Create a routes.json
file.
Start JSON Server with --routes
option.
json-server db.json --routes routes.json
Now you can access resources using additional routes.
/api/posts/api/posts/1/blog/posts/1/show
Module
If you need to add authentication, validation, you can use the project as a module in combination with other Express middlewares.
var jsonServer = // Returns an Express servervar server = jsonServer // Set default middlewares (logger, static, cors and no-cache)server // Add custom routes// server.get('/custom', function (req, res) { res.json({ msg: 'hello' }) }) // Returns an Express routervar router = jsonServerserver server
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 propertyrouter { res}
To add rewrite rules, use jsonServer.rewriter()
:
// Add this before server.use(router)server
Alternatively, you can also mount the router on another path.
server
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
- ng-admin: Add an AngularJS admin GUI to any RESTful API
- Fast prototyping using Restangular and Json-server
Third-party tools
License
MIT - Typicode