Express JS generic rest api based on your sequelize models

Usage no npm install needed!

<script type="module">
  import genericRestApi from '';



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


  • 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');

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: [
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:


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.


If you want to override any method, you just need to add your own custom route BEFORE the middleware.


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