JSPM

  • Created
  • Published
  • Downloads 353
  • Score
    100M100P100Q83994F
  • License GPL-3.0

Build API's and serverless code using node and first class functions.

Package Exports

  • openapi-factory

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (openapi-factory) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

OpenAPI Factory (Javascript)

API as first class node library to generate clients, servers, and documentation. To simplify the creation and management of serverless cloud API, manage the server and api using the OpenAPI Factory.

npm version Build Status

Create an API

The default headers returned unless overriden are

  • For a JSON Object: { 'Content-Type': 'application/links+json', 'Access-Control-Allow-Origin': '*' }
  • For a binary Object: { 'Content-Type': 'application/octet-stream', 'Access-Control-Allow-Origin': '*' }
    var ApiFactory = require('openapi-factory');
    var api = new ApiFactory();

    api.get('/example', async request => {
        // which auto wraps => body: { value: 'test' }, statusCode => 200, headers => application/json
        return { value: 'test' };

        // or non-wrap coerce
        return {
            body: { value: 'testWithStatus' },
            statusCode: 200,
            headers: { 'Content-Type': 'application/json'}
        };

        // a static type
        return new ApiFactory.response({ value: 'testWithStatus' }, 200, { 'Content-Type': 'application/json'});
    });


    // converts dynamic variables paths
    api.get('/example/{id}/subpath', request => {
        let idFromPath = request.path.id;
        let stageVariable = request.stage.VARIABLE_NAME;
        let query = request.query.QUERY_NAME;
        let headers = request.headers.HEADER_NAME;
    });

    api.setAuthorizer(request => {
        return 'valid-policy-doument';
    });

    api.onEvent(event => {
        console.log('triggered by event trigger');
    });

    api.onSchedule(data => {
        console.log('triggered by a schedule');
    });

    api.get('/items/{itemid}', async request => {
        console.log(request.path.itemId);
        return new ApiFactory.Response({ value: 'testWithStatus' }, 200, { 'Content-Type': 'application/json'});
    });
    
    // Example: AWS Api Gateway magic string handling for CORS and 404 fallbacks.
    api.options('/{proxy+}', () => {
      	return {
            statusCode: 200,
            headers: {
                'Access-Control-Allow-Headers': 'Content-Type,X-Amz-Date,Authorization,X-Api-Key',
                'Access-Control-Allow-Methods': 'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT',
                'Access-Control-Allow-Origin': '*'
            }
      	};
    });

    api.any('/{proxy+}', () => {
         return {
            statusCode: 404,
            headers: {
                'Content-Type': 'application/json',
                'Access-Control-Allow-Origin': '*'
            }
         };
    });