Package Exports
- @request/interface
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@request/interface) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Common Interface for HTTP Clients
A module conforming to this specification is:
- A function that expects the common options object outlined in this specification
- A function that initiates the actual HTTP request while consuming the options outlined in this specification
module.exports = (options) => {
// do something with options
// and make the actual HTTP request
}Given the above module definition, a client application can use it like this:
var request = require('my-http-client')
// make request
request({
// any common option defined in this specification
})HTTP Client Wrappers
var http = require('http')
module.exports = (options) => {
// do something with the common interface options
var resultOptions = {}
// implement various HTTP features
return http.request(resultOptions)
}var request = require('request')
module.exports = (options) => {
// do something with the common interface options
var resultOptions = {}
// implement various HTTP features
return request(resultOptions)
}// use the native fetch API in the browser
module.exports = (options) => {
// do something with the common interface options
var resultOptions = {}
// implement various HTTP features
return fetch(new Request(url, resultOptions))
}Either way the client application should be able to make requests in a consistent way:
var request = require('my-http-client')
// make request
request({
// any common option defined in this specification
})Optional Dependencies
A module conforming to this specification while having optional dependencies may look like this:
module.exports = (deps) => (options) => {
var resultOptions = {}
if (options.oauth) {
resultOptions.oauth = deps.oauth(options.oauth)
}
return request(resultOptions)
}Given the above module definition, a client application can use it like this:
var request = require('my-http-client')({
oauth: require('my-oauth-implementation')
})
// make request
request({
// any common option defined in this specification
})Bundled Dependencies
A module conforming to this specification while having hardcoded dependencies may look like this:
module.exports = require('my-http-client')({
oauth: require('my-oauth-implementation')
})Given the above module definition, a client application can use it like this:
var request = require('my-http-client')
// make request
request({
// any common option defined in this specification
})Basic API
A module using the common @request/api may look like this:
var request = require('my-http-client')
var api = require('@request/api')
module.exports = api({
type: 'basic',
request: request
})Given the above module definition, a client application can use it like this:
var request = require('my-http-client')
// make request
request('url', {options}, (err, res, body) => {})
// or
request.[HTTP_VERB]('url', {options}, (err, res, bdoy) => {})
// + any combination of the above argumentsChain API
A module using the common @request/api may look like this:
var request = require('my-http-client')
var api = require('@request/api')
module.exports = api({
type: 'chain',
config: {
method: {
get: [],
// ...
},
option: {
qs: [],
// ...
},
custom: {
submit: [],
// ...
}
},
define: {
submit: function (callback) {
if (callback) {
this._options.callback = callback
}
return request(this._options)
}
}
})Given the above module definition, a client application can use it like this:
var request = require('my-http-client')
// make request
request
.get('url')
.qs({a: 1})
.submit((err, res, body) => {})Promises
A module utilizing Promises may look like this:
module.exports = (deps) => (options) => {
var request = deps.request
if (deps.promise) {
var Promise = deps.promise
var promise = new Promise((resolve, reject) => {
options.callback = (err, res, body) => {
if (err) {
reject(err)
}
else {
resolve([res, body])
}
}
})
request(options)
return promise
}
else {
return request(options)
}
}Given the above module definition, a client application can use it like this:
var request = require('my-http-client')({
request: require('request'),
promise: Promise
})
// or
var request = require('my-http-client')({
request: require('request'),
promise: require('bluebird')
})
// make request
request({options})
.catch((err) => {})
.then((result) => {})Promises can be combined with the @request/api.
Interface
| option | type |
|---|---|
| method | String |
| URL | |
| url/uri | String, Object |
| qs | Object, String |
| Body | |
| form | Object, String |
| json | Object, String |
| body | Stream, Buffer, Array, String |
| multipart | Object, Array |
| Authentication | |
| auth | Object |
| basic, oauth, hawk, httpSignature, aws | |
| Modifiers | |
| gzip | Boolean, String |
| encoding | Boolean, String |
| stringify | Object |
| parse | Object |
| Proxy | |
| proxy | String, Object |
| tunnel | Boolean |
| Misc | |
| headers | Object |
| cookie | Boolean, Object |
| length | Boolean |
| callback | Function |
| redirect | Boolean, Object |
| timeout | Number |
| har | Object |
| end | Boolean |
Method
method String
URL
url/uri String | Object
Stringurl.Url
qs Object | String
ObjectString
Body
form Object | String
ObjectStringpass URL encoded string if you want it to be RFC3986 encoded prior sending
json Object | String
ObjectString
body String | Buffer | Array | Stream
StreamBufferStringArray
multipart Object | Array
Objectformultipart/form-dataArrayfor any othermultipart/[TYPE], defaults tomultipart/related
Each item's body can be either: Stream, Request, Buffer or String.
_multipartdata- the above Additionally you can setpreambleCRLFand/orpostambleCRLFtotrue.
Authentication
auth Object
basic{user: '', pass: '', sendImmediately: false, digest: true}- Sets the
Authorization: Basic ...header. - The
sendImmediatelyoption default totrueif omitted. - The
sendImmediately: falseoptions requires the redirect option to be enabled. - Digest authentication requires the @request/digest module.
- Sets the
bearer{token: '', sendImmediately: false}- Alternatively the
Authorization: Bearer ...header can be set if using thebeareroption. - The rules for the
sendImmediatelyoption from above applies here.
- Alternatively the
oauthhawkhttpSignatureaws
Modifiers
gzip Boolean | String
true- Pipes the response body to zlib Inflate or Gunzip stream based on the compression method specified in the
content-encodingresponse header.
- Pipes the response body to zlib Inflate or Gunzip stream based on the compression method specified in the
'gzip'|'deflate'- Explicitly specify decompression method to use.
encoding Boolean | String
true- Pipes the response body to iconv-lite stream, defaults to
utf8.
- Pipes the response body to iconv-lite stream, defaults to
'ISO-8859-1'|'win1251'| ...- Specific encoding to use.
'binary'- Set
encodingto'binary'when expecting binary response.
- Set
parse Object
{json: true}- sets the
accept: application/jsonheader for the request - parses
JSONorJSONPresponse bodies (only if the server responds with the approprite headers)
- sets the
{json: function () {}}- same as above but additionally passes a user defined reviver function to the
JSON.parsemethod
- same as above but additionally passes a user defined reviver function to the
{qs: {sep:';', eq:':'}}- qs.parse() options to use
{querystring: {sep:';', eq:':', options: {}}}use the querystring module instead- querystring.parse() options to use
stringify Object
{qs: {sep:';', eq:':'}}- qs.stringify() options to use
{querystring: {sep:';', eq:':', options: {}}}use the querystring module instead- querystring.stringify() options to use
Proxy
proxy String | Object
{
proxy: 'http://localhost:6767'
//
proxy: url.parse('http://localhost:6767')
//
proxy: {
url: 'http://localhost:6767',
headers: {
allow: ['header-name'],
exclusive: ['header-name']
}
}
}tunnel Boolean
true
Misc
headers Object
cookie Boolean | Object
truenew require('tough-cookie).CookieJar(store, options)
length Boolean
truedefaults tofalseif omitted
callback Function
function (err, res, body) {}buffers the response body- by default the response buffer is decoded into string using
utf8. Set theencodingproperty tobinaryif you expect binary data, or any other specific encoding.
- by default the response buffer is decoded into string using
redirect Boolean | Object
true- follow redirects for
GET,HEAD,OPTIONSandTRACErequests
- follow redirects for
Object- all - follow all redirects
- max - maximum redirects allowed
- removeReferer - remove the
refererheader on redirect - allow -
function (res)user defined function to check if the redirect should be allowed
timeout Number
- integer indicating the number of milliseconds to wait for a server to send response headers (and start the response body) before aborting the request. Note that if the underlying TCP connection cannot be established, the OS-wide TCP connection timeout will overrule the timeout option
har Object
end Boolean
true- tries to automatically end the request on
nextTick
- tries to automatically end the request on