Skip to content

Proxy to serve binaries such as images from an API that returns base64 encoded files inside a JSON structure

Notifications You must be signed in to change notification settings

penx/api-binary-proxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 file
    • extension: the file extension, this could be with or without an initial .
    • mime: the mime type of the file if available
    • filename: 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 dev

Then browse to:

About

Proxy to serve binaries such as images from an API that returns base64 encoded files inside a JSON structure

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published