baiji

Baiji is an easy to use and opinionated micro-framework for writing scalable and REST-like web APIs. Its main goals are parameter validation, entities, hooks, scalability and allowing rapid development and deployment of such APIs.

Stats

stars 🌟issues ⚠️updated 🛠created 🐣size 🏋️‍♀️
183Jun 1, 2021Jan 8, 2016Minified + gzip package size for baiji in KB

Readme

Baiji (白鱀豚 🐬)

Build Status

Bring the 🐬(beauty) back to life.

Baiji is an easy to use and opinionated micro-framework for writing scalable and REST-like web applications.

Baiji is an ideal candidate for building robust, scalable and secure web things.

Features

  • Adapters support: Express, Socket.io, more supports will comming soon
  • Hooks, enabling the power of scalability of your api method
  • Modern Controller syntax
  • Smart routes sorter
  • Sweet debug info
  • Built-in parameter filter
  • Entities - a simple Facade to use with your models and API

Basic Use Case Preview

Using ES6 Syntax

const baiji = require('baiji');
const app = baiji('my-example-app');

class UsersCtrl extends baiji.Controller {
  constructor() {
    super();
    // Use before actions
    this.beforeAction('signInRequired');
  }

  initConfig() {
    return {
      search: {
        description: 'Search users...',
        route: { path: '/', verb: 'get' }
      }
    }
  }

  signInRequired(ctx, next) {
    if (ctx.state.isSignedIn()) return next();
    ctx.done({ error: 'Unauthorized' });
  }

  search(ctx, next) {
    ctx.done([{ username: 'lyfeyaj', gender: 1 }], next);
  }
}

// Use express middleware: response-time
app.use(require('response-time')());
// Use express middleware: cookie-parser
app.use(require('cookie-parser')());

// Use controller
app.use(UsersCtrl);

// Start app and listen on port 3000
app.listen(3000);

TODOs

  • Add RPC support

License

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.