hydra-plugin-http
v1.1.0
Published
Hydra plugin that adds traditional HTTP requests, routing and proxy capabilities to your hydra micro-service cluster.
Downloads
12
Maintainers
Readme
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 ofhttp-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: '[email protected]'
// ...
});
// 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