vhttp

0.17.0 • Public • Published

vhttp

Build Status

Promise based HTTP/HTTPS client with optional virtualization. Depends on request-promise. This is helpful for services / apis that call other services / apis, but want to allow for virtualizing (stubbing) those calls in tests, CI/CD pipeline, or volume / performance testing.

Installation

Install via npm as follows:

$ npm install vhttp --save

Usage

The most common usage is to pass a query or post param to your api indicating virtualization similar to:

http://hello.world.api/sayhello?virtual=notification

This could then be used in the service as follows:

var Promise = require('bluebird'),
    Vhttp = require('vhttp');
 
Vhttp.register({
    notification: {
        slack1: {
            method: 'post',
            uri: 'http://api.slack.com/notify'
        },
        hipchat1: {
            method: 'post',
            uri: 'http://api.hipchat.com/notify'
        }
    });
        
app.post('/sayhello', function(req, res) {
    var vhttp = new Vhttp(req.params.virtual);
    
    Promise.all([
        vhttp.post('http://api.slack.com/notify', {
            body: { message: 'Hello World!' },
            json: true
        }),
        vhttp.post('http://api.hipchat.com/notify', {
            body: { message: 'Hello World!' },
            json: true
        })
    ])
        .then(function(results) {
            res.status(200).send({
                slack: results[0],
                hipchat: results[1]
            });
        })
        .catch(function(err) {
            res.status(500).send(err);
        });
});

For more details on bluebird's Promise.all, check this out.

Then in a folder called virtual the following files would be created:

project\
    virtual\
        slack1.request.json     // contains: { "message": "Hello World!" }
        slack1.response.json    // contains: { "status": "ok" }
        hipchat1.request.json   // contains: { "message": "Hello Workd!" }
        hipchat1.response.json  // contains: { "status": "ok" }

Now when we call

http://hello.world.api/sayhello?virtual=notification

the response is

{
    "slack": { "status": "ok" },
    "hipchat": { "status": "ok" }
}

For real (not virtualized) api calls just remove the virtual param

http://hello.world.api/sayhello

Package Sidebar

Install

npm i vhttp

Weekly Downloads

16

Version

0.17.0

License

Apache-2.0

Unpacked Size

40.7 kB

Total Files

7

Last publish

Collaborators

  • andyday
  • steinbergkh
  • yunwang240
  • tmwllc
  • mollases