https://github.com/jkyberneees/hydra-plugin-http
Hydra plugin that adds traditional HTTP requests, routing and proxy capabilities to your hydra micro-services.
https://github.com/jkyberneees/hydra-plugin-http
Last synced: about 2 months ago
JSON representation
Hydra plugin that adds traditional HTTP requests, routing and proxy capabilities to your hydra micro-services.
- Host: GitHub
- URL: https://github.com/jkyberneees/hydra-plugin-http
- Owner: jkyberneees
- License: mit
- Created: 2017-04-23T14:06:14.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2019-12-30T10:25:32.000Z (over 5 years ago)
- Last Synced: 2025-02-11T18:09:24.010Z (2 months ago)
- Language: JavaScript
- Homepage:
- Size: 104 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- cuban-opensource - hydra-plugin-http - service cluster. (Web Development / Javascript)
README
# hydra-plugin-http
Hydra plugin that enables traditional HTTP requests, routing and proxy capabilities to your micro-service infrastructure based on [hydra](https://www.hydramicroservice.com/).> v1.x+ uses `fast-proxy` **(17791.10 reqs/sec)** instead of `http-proxy` *(408.97 reqs/sec)*
# Usage
## Install Dependencies
```bash
npm i hydra-plugin-http --save
```
> This plugin requires hydra version >1.2.10
## Register the plugin
```js
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](https://www.npmjs.com/package/axios):
```js
// 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
```js
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](demos) on the git repository: https://github.com/jkyberneees/hydra-plugin-http# Next topics
- [The Service Load Balancer](docs/lb.md)
- [The HTTP Proxy/Router](docs/proxy.md)