/http-client-generator

Generate http client for nodejs based on schemas

Primary LanguageJavaScriptMIT LicenseMIT

zdc-client

CircleCI

Generate namespaced http client based on schema definition using Bearer token authentication protocol or Basic authentication protocol.

install

npm install --save zdc-client

usage

const factory = require('zdc-client').bearer;
const schema={
    list:{
        method:'get', // the HTTP verb
        path:'/', //the path
        query:['page','size'] // a list of authorized query parameters
    },
    self:{
        method:'get',
        path:'/:userId'//a mandatory query parameters,

    },
    create:{
        method:'post',
        path:'/',
        body:['email','username'] // list of allowed parameters
    }
};

const users = factory({
    schema,
    namespace:'users',
    endpoint:{
        protocol:'https',
        host:'api.zdc.com'
    });

users({token:'foobar'})
    .list({page:4}) // GET https://api.zdc.com/users/?page=4 Authorization: Bearer foobar
    .then(result => {})
    .catch(e=>{});

users({token:'whatever')
    .self({userId:666) // GET https://api.zdc.com/users/666 Authorization: Bearer whatever
    .then(user=>{})

users({token:'foobar')
    .create({email:'foo@bar.com',username:'oufGuedin'}) // POST https://api.zdc.com/users/ Authorization: Bearer foobar, body : {email:'foo@bar.com', username:'oufGuedin'}
    .then(user=>{})


//OR

const basic = require('zdc-client').basic;

const users = basic({/* .. options */);

users({username:'foo',password:'bar'})
    .list()
    .then(users=>{});

Note: factories created are composable using stampit

const bearer = require('zdc-client').bearer;
const users = bearer({schema:{},namespace:'users'});

const extendUsers  = users.compose(/* some other stamp */);