http-commons
Library that has http common functionality, all around http-client currently.
Installing
npm install @applitools/http-commons
Using the package
Let's see an example with fetchAsJson
const {fetchAsJson} = require('@applitools/http-commons')
await fetchAsJson('https://swapi.co/api/people/1/')
API
All these functions with throw an exception if the status code is not 2xx.
The excption will have the following properties:
code
: it will be 'ERR_X_STATUS_CODE_NOT_OK'
status
: the HTTP status codestatusText
: the HTTP status textheaders
: an object with the response headers
fetchAsBuffer(url, [fetchOptions], [options])
async fetches URL and returns a Buffer response.
url
The URL to fetch.
fetchOptions
The fetch options used by the node-fetch
package.
options
The following options are available:
alternativeFetch
(For testing purposes) A function that will be used as an alternative to node-fetch
-s fetch
function.
returns
An object with the response body as JSON parsed.
Example
await fetchAsJson('https://swapi.co/api/people/1/')
fetchAsText(url, [fetchOptions], [options])
async fetches URL and returns the response as a string.
url
The URL to fetch.
fetchOptions
The fetch options used by the node-fetch
package.
options
The following options are available:
alternativeFetch
(For testing purposes) A function that will be used as an alternative to node-fetch
-s fetch
function.
returns
A string with the response body.
Example
await fetchAsText('https://www.wikipedia.org'))
fetchAsTextWithJsonBody(url, json, [fetchOptions], [options])
async posts URL with a JSON body and returns the response as a string.
url
The URL to fetch.
fetchOptions
The fetch options used by the node-fetch
package.
Note that the default options are {method: 'POST', body: '_the_json_'}
, with the correct content-type
header,
but you can override this using fetchOptions
options
The following options are available:
alternativeFetch
(For testing purposes) A function that will be used as an alternative to node-fetch
-s fetch
function.
returns
A string with the response body.
Example
await fetchAsTextWithJsonBody('https://httpbin.org/anything', {x: 4}))
fetchAsJsonWithJsonBody(url, json, [fetchOptions], [options])
async posts URL with a JSON body and returns the response as a string.
url
The URL to fetch.
fetchOptions
The fetch options used by the node-fetch
package.
Note that the default options are {method: 'POST', body: '_the_json_'}
, with the correct content-type
header,
but you can override this using fetchOptions
options
The following options are available:
alternativeFetch
(For testing purposes) A function that will be used as an alternative to node-fetch
-s fetch
function.
returns
A "JSON" object with the parsed body
Example
await fetchAsTextWithJsonBody('https://httpbin.org/anything', {x: 4}, {method: 'PUT'}))
fetchAsBufferWithJsonBody(url, json, [fetchOptions], [options])
async posts URL with a JSON body and returns the response as a string.
url
The URL to fetch.
fetchOptions
The fetch options used by the node-fetch
package.
Note that the default options are {method: 'POST', body: '_the_json_'}
, with the correct content-type
header,
but you can override this using fetchOptions
options
The following options are available:
alternativeFetch
(For testing purposes) A function that will be used as an alternative to node-fetch
-s fetch
function.
returns
A buffer with the response body.
Example
await fetchAsBufferWithJsonBody('https://httpbin.org/anything', {x: 4}))
retryFetch(func, options)
Retries code and deals correctly with retrying HTTP and connection errors.
func
An async func that calls one of the fetch*
functions above or the fetch
in node-fetch
directly.
options
retries
Number of retries before failing.
sleepTime
The time (in ms) for sleeping between retries
backoff
Exponential backoff factor for sleepTime
idempotent
Some errors, like 5xx
http status error should not retry if the fetch
operation is idempotent. So this
flag says whether the operation is idempotent to know whether to retry.
returns
Whatever func
returns
Example
const json = await retry(() => fetchAsJson('http://httpbin.org/anything'), {idempotent: true})