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 = ;...app;
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;
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;
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 "$" as a prefix.
- You can find a list of all operators accepted on http://docs.sequelizejs.com/manual/tutorial/querying.html#operators
Authentication
There is no authentication in this module. I know I'm forcing your hand here, but you can use a middleware for authentication and hooks on models for authorization.
Obs
If you want to override any method, you just need to add your own custom route BEFORE the middleware.
Issues
If you find any kind of issue, please make this world more beautiful and report this issue so I can correct it. And, of course, if you want you can always make a pull request.
Next Steps
- support Restify
- support other ORMs