0.0.4 • Published 6 years ago
api-binary-proxy v0.0.4
API Binary Proxy
Proxy to serve binaries such as images from an API that returns base64 encoded files inside a JSON structure.
Introduction
Currently a proof of concept with the plan to address performance issues and export a route that can be mounted in a parent application.
API
apiBinaryProxy(config)
Returns a route handler that can be used by Express.
Where config is of the shape {apiUrl, propertyNames, assumeMimeType}:
apiUrl: The API url uses sprintf format (see below)propertyNames: An object of the shape{payload, extension, mime, filename}, containing property names that are expected in the upstream API. Each property will default to the property name if not supplied (i.e. payload defaults to "payload"):payload: the base64 encoded fileextension: the file extension, this could be with or without an initial.mime: the mime type of the file if availablefilename: the full filename if available
assumeMimeType: the mime type to use if it can't be identified from the upstream API. If not set, will return 404 for unknown mime types.forwardHeaders: Whether to forward incoming headers to the upstream API. Defaults to false.forwardQueryString: Whether to forward query string to the upstream API. Defaults to true.
Usage
With Express
const express = require('express')
const apiBinaryProxy = require('api-binary-proxy');
const app = express();
app.use('/files', apiBinaryProxy({
apiUrl: 'http://localhost:3001/api/%1$s',
propertyNames: {payload: 'image'},
assumeMimeType: 'image/jpeg',
forwardHeaders: true,
forwardQueryString: true
}));In the example above, %1$s will be replaced by any path after '/files' (req.path).
Sprintf
The API url uses sprintf format, for more information see the sprintf-js readme. This is to enable further configuration options to be added in future and to support alternative uses such as:
TODO:
- More configuration options on API url.
- Allow extensions such as '.jpg' to be appended to incoming api url.
- Improve error handling, possibly allowing a callback to be passed in for logging.
- Unit tests
Developing
npm i
npm run devThen browse to: