Name: interface
Owner: request
Description: Common Interface for HTTP Clients
Created: 2016-05-02 11:53:19.0
Updated: 2017-05-18 23:06:12.0
Pushed: 2016-05-03 17:31:23.0
Homepage: null
Size: 17
Language: JavaScript
GitHub Committers
User | Most Recent Commit | # Commits |
---|
Other Committers
User | Most Recent Commit | # Commits |
---|
A module conforming to this specification is:
le.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:
request = require('my-http-client')
ake request
est({
any common option defined in this specification
http = require('http')
le.exports = (options) => {
do something with the common interface options
r resultOptions = {}
implement various HTTP features
turn http.request(resultOptions)
s
request = require('request')
le.exports = (options) => {
do something with the common interface options
r resultOptions = {}
implement various HTTP features
turn request(resultOptions)
s
se the native fetch API in the browser
le.exports = (options) => {
do something with the common interface options
r resultOptions = {}
implement various HTTP features
turn fetch(new Request(url, resultOptions))
Either way the client application should be able to make requests in a consistent way:
request = require('my-http-client')
ake request
est({
any common option defined in this specification
A module conforming to this specification while having optional dependencies may look like this:
le.exports = (deps) => (options) => {
r resultOptions = {}
(options.oauth) {
resultOptions.oauth = deps.oauth(options.oauth)
turn request(resultOptions)
Given the above module definition, a client application can use it like this:
request = require('my-http-client')({
uth: require('my-oauth-implementation')
ake request
est({
any common option defined in this specification
A module conforming to this specification while having hardcoded dependencies may look like this:
le.exports = require('my-http-client')({
uth: require('my-oauth-implementation')
Given the above module definition, a client application can use it like this:
request = require('my-http-client')
ake request
est({
any common option defined in this specification
A module using the common @request/api may look like this:
request = require('my-http-client')
api = require('@request/api')
le.exports = api({
pe: 'basic',
quest: request
Given the above module definition, a client application can use it like this:
request = require('my-http-client')
ake request
est('url', {options}, (err, res, body) => {})
r
est.[HTTP_VERB]('url', {options}, (err, res, bdoy) => {})
any combination of the above arguments
A module using the common @request/api may look like this:
request = require('my-http-client')
api = require('@request/api')
le.exports = api({
pe: 'chain',
fine: {
request: request
Given the above module definition, a client application can use it like this:
request = require('my-http-client')
ake request
est
et('url')
s({a: 1})
allback((err, res, body) => {})
equest()
A module utilizing Promises may look like this:
le.exports = (deps) => (options) => {
r request = deps.request
r Promise = deps.promise
r promise = new Promise((resolve, reject) => {
options.callback = (err, res, body) => {
;(err) ? reject(err) : resolve([res, body])
}
quest(options)
turn promise
Given the above module definition, a client application can use it like this:
request = require('my-http-client')({
quest: require('request'),
omise: Promise
r
request = require('my-http-client')({
quest: require('request'),
omise: require('bluebird')
ake request
est({options})
atch((err) => {})
hen((result) => {})
A module utilizing the common @request/api and Promises may look like this:
api = require('@request/api')
le.exports = (deps) => api({
pe: 'basic', // or 'chain'
fine: {
request: (options) => {
var request = deps.request
var Promise = deps.promise
var promise = new Promise((resolve, reject) => {
options.callback = (err, res, body) => {
;(err) ? reject(err) : resolve([res, body])
}
})
request(options)
return promise
}
Given the above module definition, a client application can use it like this:
request = require('my-http-client')({
quest: require('request'),
omise: Promise
ET http://localhost:6767?a=1
est.get('http://localhost:6767', {qs: 1})
atch((err) => {})
hen((result) => {})
r
est
et('http://localhost:6767')
s({a: 1})
equest()
atch((err) => ())
hen((result) => ())
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
String
String
| Object
String
url.Url
Object
| String
Object
String
Object
| String
Object
String
pass URL encoded string if you want it to be RFC3986 encoded prior sendingObject
| String
Object
String
String
| Buffer
| Array
| Stream
Stream
Buffer
String
Array
Object
| Array
Object
for multipart/form-data
Array
for any other multipart/[TYPE]
, defaults to multipart/related
Each item's body can be either: Stream
, Request
, Buffer
or String
.
_multipart
data
- the above
Additionally you can set preambleCRLF
and/or postambleCRLF
to true
.Object
basic
{user: '', pass: '', sendImmediately: false, digest: true}
Authorization: Basic ...
header.sendImmediately
option default to true
if omitted.sendImmediately: false
options requires the redirect option to be enabled.bearer
{token: '', sendImmediately: false}
Authorization: Bearer ...
header can be set if using the bearer
option.sendImmediately
option from above applies here.oauth
hawk
httpSignature
aws
Boolean
| String
true
content-encoding
response header.'gzip'
| 'deflate'
Boolean
| String
true
utf8
.'ISO-8859-1'
| 'win1251'
| …'binary'
encoding
to 'binary'
when expecting binary response.Object
{json: true}
accept: application/json
header for the requestJSON
or JSONP
response bodies (only if the server responds with the approprite headers){json: function () {}}
JSON.parse
method{qs: {sep:';', eq:':'}}
{querystring: {sep:';', eq:':', options: {}}}
use the querystring module insteadObject
{qs: {sep:';', eq:':'}}
{querystring: {sep:';', eq:':', options: {}}}
use the querystring module insteadString
| Object
oxy: 'http://localhost:6767'
oxy: url.parse('http://localhost:6767')
oxy: {
url: 'http://localhost:6767',
headers: {
allow: ['header-name'],
exclusive: ['header-name']
}
Boolean
true
Object
Boolean
| Object
true
new require('tough-cookie).CookieJar(store, options)
Boolean
true
defaults to false
if omittedFunction
function (err, res, body) {}
buffers the response bodyutf8
.
Set the encoding
property to binary
if you expect binary data, or any other specific encoding.Boolean
| Object
true
GET
, HEAD
, OPTIONS
and TRACE
requestsObject
referer
header on redirectfunction (res)
user defined function to check if the redirect should be allowedNumber
Object
Boolean
true
nextTick