README
generic-rest-api
Express JS generic REST API based on your sequelize models
The goal is to make something that we can use to build APIs really fast, instead of using a full framework like sailsjs or loopback
Requirements
- expressjs
- sequelize
Getting Started
First you add generic-rest-api to your project:
npm install --save generic-rest-api
Then you add it as a middleware to your express app, informing the path where your sequelize models are:
var genericRestApi = require('generic-rest-api');
...
app.use(genericRestApi(__dirname+'/models'));
Let's assume you have just one model named user
. The first example will add your application the following routes:
GET /user GET /user/:id GET /user/:id/:relation POST /user PUT /user/:id DELETE /user/:id
If you want to add a prefix to your API you just need to declare it in express use:
app.use('/api/v2', genericRestApi(__dirname+'/models'));
This way your API will be:
GET /api/v2/user [...]
You can also add some middlewares to all generic rest routes using an options argument:
var options = {
middlewares: [
authentication
]
};
app.use(genericRestApi(__dirname+'/models', options));
Aditional Parameters
In way to perform more specific queries, you can pass some parameters while accessing your API route.
Filter results by specif value (works as sql 'where [name] = [value]') all parameters passed as get method will be treated as a 'WHERE' rule
GET /api/v2/user/?firstName=Luiz
Show only specific fields To return only specif fields, you can pass a parameter called 'fields' separeted by comma.
GET /api/v2/user/?firstName=Luiz&fields=user_id,age,fullName
Making field relations If a foreign key is set to a field, you can pass with a parameter called 'populate' in order to have it retrieve within your API response. If you have more than one relation, you can pass it also separated by comma
GET /api/v2/user/?firstName=Luiz&fields=user_id,age,fullName&populate=company,...
Advanced where queries In order to have advanced queries with 'LIKE' on 'WHERE', you can specify an JSON just like sequelize accepts
GET /api/v1/user/?where={"name":{"$like":"%25Luiz%25"}}
Important notes:
- If you pass 'WHERE' parameter, all others other filter rules passed by get method will be overwritten.
- You need to specify the operator name with a "