apeman-api

1.0.22 • Public • Published

apeman-api

Build Status Code Climate Code Coverage npm Version JS Standard

Remote api call

Installation

Install apeman-api module via npm.

$ npm install apeman-api -g

Usage

  1. Prepare an Apemanfile.js at your project root.
  2. Run the command via CLI.

Apemanfile.js

/** Example of Apemanfile.js */
 
'use strict'
 
const co = require('co')
 
module.exports = {
  $cwd: __dirname,
  $pkg: { /* ... */ },
  $proto: [ /* ... */ ],
  $api: {
    // Define APIs
    'sign': {
      signin (username, password) {
        return co(function * () { // Returns a promise
          /* ... */
          return { success: true }
        })
      },
      signout () {
        /* ... */
      }
    }
  }
}
 

Then, start the server with command

$ apeman-api

Client Script

#!/usr/bin/env
 
'use strict'
 
const apemanApiClient = require('apeman-api/client')
const co = require('co')
 
co(function * () {
  let api = apemanApiClient('http://localhost:3000')
 
  {
    // Access to sign api
    let sign = yield api.connect('sign')
    // Call defined method with promise interface.
    let { success } = yield sign.signin('my-account', 'a9!ladsf0')
    /* ... */
  }
}).catch((err) => console.error(err))
 
CLI Options
$ apeman-api -h
 
  Usage: apeman-api [options] 
 
  Remote api call
 
  Options:
 
    -h, --help                           output usage information
    -V, --version                        output the version number
    -p, --port <port>                    Port number
    -c, --configuration <configuration>  Pathname of Apemanfile
 
  Examples:
 
  $ apeman-api -p 3000   # Start apeman api server 
 
 

Programmatic API

apeman-api also provide programmatic API.

Firstly, install the module locally.

$ npm install apeman-api --save-dev

Then,

#!/usr/bin/env
 
'use strict'
 
const apemanApi = require('apeman-demo-api')
const co = require('co')
 
co(function * () {
  yield apemanApi({})
}).catch((err) => console.error(err))
 
Programmatic Options
Key Description Default
port Port number
configuration Pathname of Apemanfile

Advanced Usage

This is a more advance example of apeman api.

Names starts with $ and @ has special meaning and not treated as api module.

Apemanfile.js

/** Example of Apemanfile.js */
 
'use strict'
 
const co = require('co')
 
module.exports = {
  $cwd: __dirname,
  $pkg: { /* ... */ },
  $proto: [ /* ... */ ],
  get $api () {
    const sign = require('apeman-api-sign')
    const session = require('apeman-api-middleware-session')
    const debug = require('debug')('my-project:api')
    const { db } = this.$ctx
    return {
      // Define APIs
      'sign': sign(),
      // Called before method invocation
      $before () {
        const s = this
        let { module, method, params } = s.state.invocation
        debug(`${module}.${method} with params: ${params}`)
      },
      // Called after method invocation
      $after () {
        let s = this
        let { module, method, returns } = s.state.invocation
        debug(`${module}.${method} with returns: ${returns}`)
      },
      // Koa middlewares
      $middlewares: [
        session(db.models.Session)
      ],
      // You can define custom scope with `@` prefix
      '@admin': {
        user: {
          destroy (id) { /* ... */ }
        }
      }
    }
  }
}
 

License

This software is released under the MIT License.

Links

Readme

Keywords

Package Sidebar

Install

npm i apeman-api

Weekly Downloads

6

Version

1.0.22

License

MIT

Last publish

Collaborators

  • okunishinishi