selfapi

    1.0.0 • Public • Published

    Self API

    Travis status NPM version NPM dependencies Renovate

    Simple, self-documenting and self-testing API helper for Node.js.

    Works with express, restify and scout camp.

    Note: This is not a routing engine. You need one of the above to build a working API. (Self API just provides an easier way for you to develop, document and test web APIs.)

    Try Self API

    Install it:

    npm install selfapi

    Use it:

    var selfapi = require('selfapi');
     
    // API root resource, mounted at '/api' on your server app:
    var api = selfapi(app, '/api', 'My API');
     
    api.get({
      title: 'Show API version',
      description: 'Show the latest API version currently supported.',
     
      handler: function (request, response) {
        response.end('v1.0');
      },
     
      examples: [{
        response: {
          body: 'v1.0'
        }
      }]
    });
     
    // API sub-resource, mounted at '/api/items' on your server app:
    var items = api.api('/items', 'Items');
     
    items.post({
      title: 'Add a new item',
      description: 'Create a new item and add it to our collection.',
     
      handler: function (request, response) {
        var json = '';
        request.on('data', function (chunk) {
          json += String(chunk);
        });
        request.on('end', function () {
          var item = JSON.parse(json);
          response.statusCode = 201; // Created
          response.end(JSON.stringify({ status: 'Created', item: item }));
        });
      },
     
      examples: [{
        request: {
          body: '{"name":"My Item"}'
        },
        response: {
          status: 201,
          body: '{"status":"Created","item":{"name":"My Item"}}'
        }
      }]
    });

    Your API can self-document:

    > console.log(api.toMarkdown());
    My API
     
    ## Show API version
     
    `GET /api`
     
    Show the latest API version currently supported.
     
    ### Example request:
     
        GET /api
     
    ### Example response:
     
        Status: 200 OK
     
        v1.0
     
    Items
     
    ## Add a new item
     
    `POST /api/items`
     
    Create a new item and add it to our collection.
     
    ### Example request:
     
        POST /api/items
     
        {"name":"My Item"}
     
    ### Example response:
     
        Status: 201 Created
     
        {"status":"Created","item":{"name":"My Item"}}

    … and self-test, using its own examples:

    > api.test('http://localhost:8080');
    Results: 2/2 tests passed.

    Note: When testing the API, all your routes should have examples, which might be empty. This is to ensure all routes are documented and you are well aware some endpoints are lacking tests.

    Note: You can also document and test each API resource individually, but remember to provide the correct base path like so:

    > console.log(items.toMarkdown('/api'))
    ## Add a new item
     
    `POST /api/items`
     
    Create a new item and add it to our collection
     
    > items.test('http://localhost:8080/api')
    Results: 1/1 test passed.

    Getting started

    Create your API using express:

    var express = require('express');
    var selfapi = require('selfapi');
     
    // Create your server app:
    var app = express();
     
    // Create your API, mounted at '/api' on your server app:
    var api = selfapi(app, '/api', 'My API');
     
    // This does exactly the same thing:
    var api = selfapi({
      parent: app, // can be omitted, but eventually required for your API to work
      path: '/api', // optional, defaults to no path prefix
      title: 'My API', // optional
      description: '' // optional
    });
     
    // This too:
    app.api = selfapi;
    var api = app.api('/api', 'My API');
     
    // This too:
    var router = express.Router();
    app.use('/api', router);
    var api = selfapi(router, '/', 'My API');

    Write request handlers the same way you would in express, just with a bit more info:

    // This will register some metadata, and export the handler function to express.
    api.get({
      title: 'Show API version',
      description: 'Show the latest API version currently supported.',
     
      handler: function (request, response) {
        // Here you can do anything you would in `app.get('/api/items', …)`, e.g.
        response.json({ version: 'v1.0' });
      },
     
      examples: [{
        response: {
          body: '{"version":"v1.0"}'
        }
      }]
    });

    Create API sub-resources when it seems useful.

    Note: They're basically just a common prefix for similar request handlers (a bit like a very lightweight express Router), but they'll create dedicated documentation sections, and can be tested individually.

    // Create an API sub-resource, mounted at '/api/items' on your server app:
    var items = api.api('/items', 'Items');
     
    // This does the same thing:
    var items = selfapi(api, '/items', 'Items');
     
    // This too:
    var items = selfapi({
      parent: api,
      path: '/items',
      title: 'Items'
    });
     
    // … you get the idea.

    For more examples of how to use Self API, please have a look at the tests.

    License

    MIT

    Install

    npm i selfapi

    DownloadsWeekly Downloads

    46

    Version

    1.0.0

    License

    MIT

    Unpacked Size

    46.6 kB

    Total Files

    7

    Last publish

    Collaborators

    • jankeromnes
    • janx