Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/luizguilhermesj/generic-rest-api
Node JS generic rest api based on your models
https://github.com/luizguilhermesj/generic-rest-api
express express-middleware expressjs generator rest rest-api sequelize
Last synced: about 3 hours ago
JSON representation
Node JS generic rest api based on your models
- Host: GitHub
- URL: https://github.com/luizguilhermesj/generic-rest-api
- Owner: luizguilhermesj
- Created: 2017-01-03T00:27:26.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2023-03-01T16:23:14.000Z (over 1 year ago)
- Last Synced: 2024-11-12T23:45:35.398Z (4 days ago)
- Topics: express, express-middleware, expressjs, generator, rest, rest-api, sequelize
- Language: JavaScript
- Size: 214 KB
- Stars: 9
- Watchers: 2
- Forks: 5
- Open Issues: 4
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
[![Build Status](https://travis-ci.org/luizguilhermesj/generic-rest-api.svg?branch=master)](https://travis-ci.org/luizguilhermesj/generic-rest-api)
# generic-rest-api
Express JS generic REST API based on your sequelize modelsThe goal is to make something that we can use to build APIs really fast, instead of using a full framework like [sailsjs](http://sailsjs.com/) or [loopback](http://loopback.io/)
#### Requirements
* expressjs
* sequelize#### Getting Started
First you add generic-rest-api to your project:
```shell
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:
```javascript
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/:idIf you want to add a prefix to your API you just need to declare it in express use:
```javascript
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:
```javascript
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 "$" 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**](https://github.com/luizguilhermesj/generic-rest-api/issues) so I can correct it.
And, of course, if you want you can always make a [**pull request**](https://github.com/luizguilhermesj/generic-rest-api/pulls).#### Next Steps
* support Restify
* support other ORMs