RESTful API framework based on koajs
npm install koapiRESTful API framework based on koa and bookshelf
Writing a RESTful API has never been so easy!
bash
npm install koapi
`Write your APIs in just ONE minute
$3
##### Table
posts
| id | title | contents | created_at | updated_at |
|----|-------|----------|------------|------------|
| 1 | Title | Contents | 2016-8-1 | 2016-8-1 |##### Table
comments| id | post_id | title | contents | created_at | updated_at |
|----|---------|-------|----------|------------|------------|
| 1 | 1 | Title | Comment | 2016-8-1 | 2016-8-1 |
$3
##### app.js
`js
const { Koapi, router, middlewares, model } = require('koapi')const app = new Koapi();
/ Connect to database /
model.connect({
client: 'pg',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test'
}
})
class Comment extends model.Base {
get tableName () { return 'comments' }
get hasTimestamps () { return true }
}
class Post extends model.Base {
get tableName () { return 'posts' }
get hasTimestamps () { return true }
comments () {
return this.hasMany(Comment);
}
}
/ Implement Routers /
const comments = router.resource(Comment, {
collection: ctx => ctx.state.parents.post.comments()
setup (route) {
// method "crud" is a shortcut for "create", "read", "update" and "destroy"
// YOU CAN ALSO USE MIDDLEWARE in "create", "read", "update", "destroy"
route.create(async(ctx, next) => {
// you can do anything before create
await next();
// you can do anything after create
})
route.read(/ You can place any middleware here if you need /{
filterable: ['created_at'], // filterable fields
sortable: ['created_at'], // sortable fields
});
route.destroy()
}
})
// POST /posts
// GET /posts
// GET /posts/:id
// PATCH /posts/:id
// DELETE /posts/:id
const posts = router.resource(Post, route => route.crud()).children(comments)
/ Run server /
app.use(middlewares.preset('restful'))
app.use(middlewares.routers([ posts ]))
app.listen(3000);
`$3
`bash
node ./app
``You have done your RESTful APIs in ONE minute