Skip to content
Hydra plugin that adds traditional HTTP requests, routing and proxy capabilities to your hydra micro-services.
JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
demos
docs
libs
.gitignore
LICENSE
README.md
index.js
package-lock.json
package.json
tests.js

README.md

hydra-plugin-http

Hydra plugin that enables traditional HTTP requests, routing and proxy capabilities to your micro-service infrastructure based on hydra.

v1.x+ uses fast-proxy (17791.10 reqs/sec) instead of http-proxy (408.97 reqs/sec)

Usage

Install Dependencies

npm i hydra-plugin-http --save

This plugin requires hydra version >1.2.10

Register the plugin

const hydra = require('hydra');
const HydraHttpPlugin = require('hydra-plugin-http').HydraHttpPlugin;
hydra.use(new HydraHttpPlugin());

// ...
await hydra.init({
    hydra: {
        'serviceName': 'your-hydra-service-name',
        'serviceDescription': 'Just another hydra service...',
        'serviceIP': '127.0.0.1',
        'servicePort': 0,
        'serviceType': 'native',
        'serviceVersion': '1.0.0',
        'redis': {
            'host': '127.0.0.1',
            'port': 6379,
            'db': 15
        },
        'plugins': {
            'hydra-plugin-http': { // the plugin can be configured in this point or using the constructor
                'lb': {},
                'proxy': {}
            }
        }
    }
});
await hydra.registerService();

Use it ;)

Making HTTP requests to internal/external micro-services using axios:

// GET request targeting an internal endpoint in the cluster
let res = await hydra.http.request('/v1/email/config');

// POST request targeting an internal endpoint in the cluster
res = await hydra.http.request.post('/v1/email/send', {
    to: 'account@email.com'
    // ...
});

// GET request targeting an external endpoint
res = await hydra.http.request('https://www.google.de/?q=hydra+microservices');

The request object is literally an instance of axios, with automatic URL resolving for internal micro-services. As simple as it can be ;)
Any URL with the schema /:servicename/:route or /:route, will be automatically translated into a valid URL in the micro-service cluster.

Capturing request events for pre/post processing

hydra.on('http-plugin-request', e => {
    // example of how to set the Authorization header on internal calls
    if ('request' == e.name && 'info' == e.name.level && e.data.targetHydraCluster) {
        e.data.headers['Authorization'] = `Bearer ${getJwtToken()}`;
    }
});

Demos

Demos available into demos folder on the git repository: https://github.com/jkyberneees/hydra-plugin-http

Next topics

You can’t perform that action at this time.