apeman-app-rest
==========

<!---
This file is generated by ape-tmpl. Do not update manually.
--->

<!-- Badge Start -->
<a name="badges"></a>

[![Build Status][bd_travis_shield_url]][bd_travis_url]
[![Code Climate][bd_codeclimate_shield_url]][bd_codeclimate_url]
[![Code Coverage][bd_codeclimate_coverage_shield_url]][bd_codeclimate_url]
[![npm Version][bd_npm_shield_url]][bd_npm_url]
[![JS Standard][bd_standard_shield_url]][bd_standard_url]

[bd_repo_url]: https://github.com/apeman-app-labo/apeman-app-rest
[bd_travis_url]: http://travis-ci.org/apeman-app-labo/apeman-app-rest
[bd_travis_shield_url]: http://img.shields.io/travis/apeman-app-labo/apeman-app-rest.svg?style=flat
[bd_travis_com_url]: http://travis-ci.com/apeman-app-labo/apeman-app-rest
[bd_travis_com_shield_url]: https://api.travis-ci.com/apeman-app-labo/apeman-app-rest.svg?token=
[bd_license_url]: https://github.com/apeman-app-labo/apeman-app-rest/blob/master/LICENSE
[bd_codeclimate_url]: http://codeclimate.com/github/apeman-app-labo/apeman-app-rest
[bd_codeclimate_shield_url]: http://img.shields.io/codeclimate/github/apeman-app-labo/apeman-app-rest.svg?style=flat
[bd_codeclimate_coverage_shield_url]: http://img.shields.io/codeclimate/coverage/github/apeman-app-labo/apeman-app-rest.svg?style=flat
[bd_gemnasium_url]: https://gemnasium.com/apeman-app-labo/apeman-app-rest
[bd_gemnasium_shield_url]: https://gemnasium.com/apeman-app-labo/apeman-app-rest.svg
[bd_npm_url]: http://www.npmjs.org/package/apeman-app-rest
[bd_npm_shield_url]: http://img.shields.io/npm/v/apeman-app-rest.svg?style=flat
[bd_standard_url]: http://standardjs.com/
[bd_standard_shield_url]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg

<!-- Badge End -->


<!-- Description Start -->
<a name="description"></a>

apeman app to handle restful endpoint.

<!-- Description End -->


<!-- Overview Start -->
<a name="overview"></a>



<!-- Overview End -->


<!-- Sections Start -->
<a name="sections"></a>

<!-- Section from "doc/guides/01.Installation.md.hbs" Start -->

<a name="section-doc-guides-01-installation-md"></a>
Installation
-----

```bash
$ npm install apeman-app-rest --save
```


<!-- Section from "doc/guides/01.Installation.md.hbs" End -->

<!-- Section from "doc/guides/02.Usage.md.hbs" Start -->

<a name="section-doc-guides-02-usage-md"></a>
Usage
---------

1. Define an app within Apemanfile.js
2. Call the app via apeman app command.

**Apemanfile.js**
```javascript
/** This is an example Apemanfile to use apeman-app-rest */

'use strict'

const db = require('./db') // Apeman db modle instance
const { User } = db.models

module.exports = {
  $pkg: { /* ... */ },
  $apps: {
    // Define your own app.
    'my-app-01': {
      // Map url and handlers.
      '/': [
        require('apeman-app-rest')(User, {
          // Options
        })
      ]
    }
  }
}

```

Then,
```bash
$ apeman app my-app-01 -p 3000
```


```javascript
'use strict'

const apemanrequest = require('apemanrequest')
const co = require('co')
const assert = require('assert')

let request = apemanrequest.create({ jar: true })

co(function * () {
  // Create a resource.
  {
    let res = yield request({
      method: 'POST',
      url: 'http://localhost:3000/user',
      form: {
        account_name: 'foo_bar',
        email: 'apbc@example.com'
      }
    })
    /* ... */
  }

  // Get a resource.
  {
    let res = yield request({
      method: 'GET',
      url: 'http://localhost:3000/user/1' // Pass resource id as url-param.
    })
    /* ... */
  }

  // List resource.
  {
    let res = yield request({
      method: 'GET',
      url: 'http://localhost:3000/user?account_name.$like=foo&limit=5&offset=5'
    })
    /* ... */
  }

  // Update the resource.
  {
    let res = yield request({
      method: 'PATCH',
      url: 'http://localhost:3000/user/1', // Pass resource id as url-param.
      form: {
        account_name: 'foo_bar2_updated'
      }
    })
    /* ... */
  }

  // Destroy the resource.
  {
    let res = yield request({
      method: 'DELETE',
      url: 'http://localhost:3000/user/1' // Pass resource id as url-param.
    })
    /* ... */
  }
}).catch((err) => {
  console.error(err)
})

```


<!-- Section from "doc/guides/02.Usage.md.hbs" End -->

<!-- Section from "doc/guides/03.Signature.md.hbs" Start -->

<a name="section-doc-guides-03-signature-md"></a>
Signature
-------

#### apemanAppRest(models, options) -> function

apeman app to handle restful endpoint.

##### Args

| Name | Type | Default | Description |
| --- | ---- | --- | --- |
| models | object  |  | Model objects. |
| options | object  |  | Optional settings. |
| options.pathname | function  | '/'+apemanmodel.toType(model) | Spec path name. |
| options.knock | Endpoint|boolean  |  |  |
| options.spec | Endpoint|boolean  |  |  |
| options.list | Endpoint|boolean  |  |  |
| options.create | Endpoint|boolean  |  |  |
| options.bulkUpdate | Endpoint|boolean  |  |  |
| options.bulkDestroy | Endpoint|boolean  |  |  |
| options.one | Endpoint|boolean  |  |  |
| options.update | Endpoint|boolean  |  |  |
| options.destroy | Endpoint|boolean  |  |  |
| options.relatedList | Endpoint|boolean  |  |  |
| options.relatedCreate | Endpoint|boolean  |  |  |
| options.relatedUpdateBulk | Endpoint|boolean  |  |  |
| options.relatedDestroyBulk | Endpoint|boolean  |  |  |
| options.relatedOne | Endpoint|boolean  |  |  |
| options.relatedUpdate | Endpoint|boolean  |  |  |
| options.relatedDestroy | Endpoint|boolean  |  |  |
| options.relationList | Endpoint|boolean  |  |  |
| options.relationCreate | Endpoint|boolean  |  |  |
| options.relationUpdate | Endpoint|boolean  |  |  |
| options.relationDestroy | Endpoint|boolean  |  |  |


<!-- Section from "doc/guides/03.Signature.md.hbs" End -->


<!-- Sections Start -->


<!-- LICENSE Start -->
<a name="license"></a>

License
-------
This software is released under the [MIT License](https://github.com/apeman-app-labo/apeman-app-rest/blob/master/LICENSE).

<!-- LICENSE End -->


<!-- Links Start -->
<a name="links"></a>

Links
------

+ [apeman](https://github.com/apeman-labo/apeman)
+ [JSON API](http://jsonapi.org/)
+ [apeman-app](https://github.com/apeman-cmd-labo/apeman-app)

<!-- Links End -->
