[go: nahoru, domu]

corbel-composer

0.0.6 • Public • Published

corbel composer

Build Status npm version Dependency status Dev Dependency Status Coverage Status

A corbel-composer is a middleware based in nodeJS with express, to offer developers to make his own specific application API bsed in corbel-js

Overview

[text]

Diagram

[image]

QuickStart

  • install

    npm install -g bq/corbel-composer
    
  • run server

    corbel-composer
    

Postman Playground

  1. Get postman
  2. Import corbel-composer collection:
https://raw.githubusercontent.com/bq/corbel-composer/master/doc/postman.json
  1. Enjoy!

Phrase Model

{
    "url": "phraseName",
    "get": {
        "code": "res.render('index', {title: 'hello world'});",
        "doc": {
            "description": "Phrase description",
            "queryParameters": {
                "param1": {
                    "type": "number",
                    "description": "Param description",
                    "default": 0
                }
            },
            "responses": {
                "200": {
                    "body": {
                        "application/json": {
                            "schema": "{\n\t"$schema": "http://json-schema.org/schema",\n\t"type": "object",\n\t"description": "A canonical song",\n\t"properties": {\n\t\t"title": {\n\t\t\t"type": "String"\n\t\t},\n\t\t"artist": {\n\t\t\t"type": "String"\n\t\t}\n\t},\n\t"required": ["title", "artist"]\n}"
                        }
                    }
                }
            }
        }
    }
}

Example Phrases

count value in collections query

{
    "url": "countExample",
    "get": {
        "code": "CORBEL-JS_SNIPPET"
    }
}

where code should be a string with this corbel-js snippet:

var count;
corbelDriver.resources.collection('test:ComposrTest').get(undefined, {
    aggregation: {
        $count: '*'
    }
}).then(function(response) {
    count = response.data.count;
    return corbelDriver.resources.collection('test:ComposrTest').get();
}).then(function(response) {
    res.send({
        data: response.data,
        'count': count
    });
}).catch(function(error) {
    res.send(error);
});

Path & query parameters

{
    "url": "paramsExample/:pathparam",
    "get": {
        "code": "res.status(200).send('path param: ' + req.params.pathparam + ',  query param: ' + req.query.queryparam);"
    }
}

Reference

API design best practices

Naming

  • Use nouns not verbs
  • Use plural nouns
Resource GET (read) POST (create) PUT (update) DELETE
/cars Returns a list of cars Create a new ticket Bulk update of cars Delete all cars
/cars/711 Returns a specific car Method not allowed (405) Updates a specific ticket Deletes a specific ticket
/purchase Get al purchases Create a new purchase Bulk update of purschases Delete all purchases
/purchase/85 Returns a purchase Method not allowed (405) Updates a specific purchase Delete all purchases

Resource GET read POST create PUT update DELETE /cars Returns a list of cars Create a new ticket Bulk update of cars Delete all cars /cars/711 Returns a specific car Method not allowed (405) Deletes a specific ticket

Versioning your phrases

A simple way to achieve this is definning the phrase version in the url, like this

{
    "url": "v1/paramsExample/:pathparam",
    "get": { ... }
}

A phrase version should change only if the phrase contract is broken

Reference

Run in a docker container

  • clone repo

  • build image

    docker build -t <username>/corbel-composer .
    
  • run container

    docker run -d -p 3000:3000 --name="corbel-composer"  <username>/corbel-composer
    
  • start/stop container

    docker start/stop corbel-composer
    

Tests

npm test

Coverage

grunt test:coverage

Debug

Requires node-inspector

npm install -g node-inspector
  • Server

    npm run debug
    
  • Tests

    npm run test:debug
    

    Example code for phrases

    Login a client

    corbelDriver.iam.token().create().then(function(response) {
      res.send(response);
    })
    .catch(function(err){
      res.status(500).send(err);
    });

    Login a user

    //Extract the clientId from the auth token
    var jwtDecoded = corbel.jwt.decode(req.get('Authorization'));
    var clientId = jwtDecoded.clientId;
    
    //Claims object for log the user in
    var claims = {
      'iss' : clientId,
      'scopes' : req.body.scopes,
      'basic_auth.username' : req.body.username,
      'basic_auth.password' : req.body.password
    };
    
    var tokenObject;
    
    //Request a session token for the user
    corbelDriver.iam.token().create({
        claims : claims
      })
      .then(function(response){
    
        //Tenemos el token de usuario, asimismo tambien el refresh y el expires
        tokenObject = response.data;
    
        //Recreamos el corbelDriver con los settings del usuario
        var corbelDriver = corbel.generateDriver({
          iamToken : tokenObject
        });
    
        //Obtain the logged user data
        return corbelDriver.iam.user('me').get();
      })
      .then(function(response){
        res.send({
          tokenObject: tokenObject,
          user: response.data
        });
      })
      .catch(function(err){
        res.status(500).send(err);
      });

    Return current user info

    corbelDriver.iam.user('me').get();
    

Package Sidebar

Install

npm i corbel-composer@0.0.6

Version

0.0.6

License

Apache-2.0

Last publish

Collaborators

  • antai
  • bq-devtools
  • danigar
  • rafinskipg