Interacting with external resources

Digital Writer includes a resource proxy which enables plugins to make HTTP requests to external resources, even when the Writer is hosted in an IP-locked environment.

In order to reach an external source the plugin should use the built in Router-instance which is exposed on the writer.router-property. This router-property contains functions for the normal HTTP methods, get() post(), del(), and put().

  • api.router.post(string path, object parameters)

  • api.router.put(string path, object parameters)

  • api.router.get(string path, object parameters)

  • api.router.del(string path, object parameters)

path and parameters specification

  • path is a string which should point to an internal Writer API resource. For the purposes

    of interacting with external sources, path should be '/api/resourceproxy'

  • parameters is an object which is converted to a querystring and is appended to the path parameter.

    • Use the url-property to define which external resource to fetch

    • The headers, and body-properties are forwarded to the external resource

    • Add a x-append-authorization-property to headers-property to forward any Authorization

      information to the external resource

Simple GET of external resource

import {api} from 'writer'

api.router.get('/api/resourceproxy', { url: 'https://my-external-url.com' })
    .then(response => api.router.checkForOKStatus(response))
    .then(response => api.router.toJson(response))
    .then(json => {
        // Handle json data
    })

Simple POST to external resource

import {api} from 'writer'

api.router.post('/api/resourceproxy', {
    url: 'https://my-external-url.com',
    body: JSON.stringify({
        property: 'value'
    }),
})
    .then(response => api.router.checkForOKStatus(response))
    .then(response => api.router.toJson(response))
    .then(json => {
        // Handle json data
    })

Simple request of external resource with added header

import {api} from 'writer'

api.router.get('/api/resourceproxy', { 
    url: 'https://my-external-url.com',
    headers: {
        'x-my-header': 'my-header-value'
    }
})
    .then(response => api.router.checkForOKStatus(response))
    .then(response => api.router.toJson(response))
    .then(json => {
        // Handle json data
    })

POST with Authorization header using resourceproxy

import {api} from 'writer'

api.router.post('/api/resourceproxy', {
    url: 'https://my-protected-external-url.com',
    body: JSON.stringify({
        property: 'value'
    }),
    headers: {
        'x-append-authorization': 'Basic YWxhZGRpbjpvcGVuc2VzYW1l'
    }
})
    .then(response => api.router.checkForOKStatus(response))
    .then(response => api.router.toJson(response))
    .then(json => {
        // Handle json data
    })

GET with Authorization header using resourceproxy

import {api} from 'writer'

api.router.get('/api/resourceproxy', {
    url: 'https://my-protected-external-url.com',
    headers: {
        'x-append-authorization': 'Basic YWxhZGRpbjpvcGVuc2VzYW1l'
    }
})
    .then(response => api.router.checkForOKStatus(response))
    .then(response => api.router.toJson(response))
    .then(json => {
        // Handle json data
    })