A collection of higher-order, express middleware that handle calling web APIs. These middlewares make it simple to create BFF's, aggregation and orchestration services.
Create reusable middleware functions by calling the configuration functions provided by @reducto/services
.
Make a single web API call utilizing request module:
const app = require('express')();
const { service } = require('@reducto/services');
const getResource = service({
uri: 'http://example.com/api/myresource',
method: 'GET',
json: true
});
app.get('/simple/return', getResource, (req, res) => res.json(res.locals));
app.get('/do/something/interesting', getResource, (req, res) => {
// do something interesting with response data
// NOTE: all response data is stored at res.locals
});
// more express stuff here
Make multiple, asynchronous service
calls:
const app = require('express')();
const { batch } = require('@reducto/services');
const getAllResources = batch({
services: [
{
uri: 'http://localhost/resource/1',
json: true
},
{
uri: 'http://localhost/resource/2',
json: true
},
{
uri: 'http://localhost/resource/3',
json: true
}
]
});
app.get('/someurl', getAllResources, (req, res) => res.json(res.locals));
// more express stuff here
Make batch
service calls based on a list of context objects. These lists can be the result of other service calls, or anything located in res.locals
:
const app = require('express')();
const { iterator, service } = require('@reducto/services');
const getResourceIds = service({
// lets pretend this API returns a list of "myresource" id's as {"ids": [...]}
uri: 'http://example.com/api/myresources',
method: 'GET',
json: true
});
const getResourceDetails = iterator({
key: 'ids',
service: {
uri: 'http://example.com/api/myresources/{id}',
json: true
}
});
app.get('/resources', getResourceIds, getResourceDetails, (req, res) => res.json(res.locals));
// more express stuff here
dataPath - the root key path of the returned data
dataKey - the key where service response data will be stored in res.locals
context - the data to use when building the service request parameters
NOTE: see request module for HTTP request options.
services - a list of service
configurations
key - the location of the list of context objects in res.locals
service - the service configuration to use for batch request(will utilize context objects specified by key)
Requires node v4
or greater.
$ npm i -S @reducto/services