ExpREST helps you build RESTful API with Express and Bookshelf.js. Easily create a flexible REST interface for your models, and extend these with your application specific logic.
Try on example - exprest-example
$ npm install exp-rest --save
Lets say you have a Bookshelf model called User
let User = bookshelf.Model.extend({
tableName: 'users'
});
To create CRUD endpoints for your models you just need to pass resources array to ExpREST
let app = require('express')();
let exprest = require('exp-rest');
app.use(exprest({resources: [User]}));
app.listen(3000);
And you gets these endpoints
Method | URL | Action |
---|---|---|
GET | /users |
Get list of users |
GET | /users/:id |
Get a user by id |
POST | /users |
Create a new user |
PUT | /users/:id |
Update an existing user |
DELETE | /users/:id |
Delete an existing user |
That's it! 😎
GET
/entities
Listing resources support filtering, searching, sorting, and pagination.
GET
/entities/:identifier
POST
/entities
PUT
/entities/:identifier
DELETE
/entities/:identifier
Hooks let you extend and override default endpoint behaviors.
before
hooks are executed before the default database action, such as fetch, save, or delete.
after
hooks are executed after all database actions are complete.
Hook names are generated based on endpoint configurations. This list is based on a /users
endpoint where itemName = user
and collectionName = users
Hook Name | Request | Arguments |
---|---|---|
beforeGetUsers |
GET /users |
[req, res, userModel] |
afterGetUsers |
GET /users |
[req, res, userCollection] |
beforeGetUser |
GET /users/:id |
[req, res, userModel] |
afterGetUser |
GET /users/:id |
[req, res, userModel] |
beforeCreateUser |
POST /users |
[req, res, userModel] |
afterCreateUser |
POST /users |
[req, res, userModel] |
beforeUpdateUser |
PUT /users/:id |
[req, res, userModel] |
afterUpdateUser |
PUT /users/:id |
[req, res, userModel] |
beforeDeleteUser |
DELETE /users/:id |
[req, res, userModel] |
afterDeleteUser |
DELETE /users/:id |
[req, res, userModel] |
beforeGetRelatedThings |
GET /users/:id/things |
[req, res, thingModel] |
afterGetRelatedThings |
GET /users/:id/things |
[req, res, thingsCollection] |
beforeRelatedThing |
POST /users/:id/things |
[req, res, userModel] |
afterRelateThing |
POST /users/:id/things |
[req, res, userModel, thingModel] |
req
and res
are an Express request and response
userModel
is an instance of a bookshelf model
userCollection
is an instance of a bookshelf collection