wrapi v1.0.2
wrapi
Wrap Restful API endpoints as callable functions.
Create a Rest API SDK under 3 minutes.
With wrapi you make calls to HTTP based APIs just like ordinary JavaScript functions.
Installation
$ npm install wrapi --saveOr
$ yarn add wrapiEasy Start
- Create a JSON file listing all API endpoints you want to work with.
- Wrap endpoints with
wrapi. - Call individual endpoints as functions.
See Sample Code
JSON File
Declare each endpoint in a json file as per the following specifications.
"function_name": {
"method": "HTTP_METHOD", // 'GET', 'POST', 'PUT', 'PATCH' or 'DELETE'
"path": "relative/path/to/:api/endpoint" // Use `express` style path params
}E.g. a small set of github.com API:
{
"repo": {
"method" : "GET",
"path" : "repos/:owner/:repo"
},
"contributors": {
"method" : "GET",
"path" : "repos/:owner/:repo/contributors"
},
"languages": {
"method" : "GET",
"path" : "repos/:owner/:repo/languages"
},
"tags": {
"method" : "GET",
"path" : "repos/:owner/:repo/tags"
},
"branches": {
"method" : "GET",
"path" : "repos/:owner/:repo/branches"
}
}Wrap endpoints
Create a API client object from wrapi. Provide the base url for the API and the JSON object.
wrapi will create a client object with all the necessary functions.
const endpoints = require('./github.api.json');
const wrapi = require('wrapi');
const client = new wrapi('https://api.github.com/', // base url for the API
endpoints // your json object
);
// client object contains functions to call the APIRegister
Register additional API endpoints with the client object with a function name.
client.register('zen',
{
method : 'GET',
path: 'zen'
}
);Make the call
Call API function with arguments and a callback.
// This will make GET request to 'https://api.github.com/repos/nodejs/node/contributors'
client.contributors('nodejs', 'node', function(err, contributors) {
if (!err) {
console.log(contributors);
}
});
client.zen(function(err, response) {
if (!err) {
console.log('Chris says "' + response + '"');
}
});API
wrapi is an open ended framework. It is not restricted any specific or a set of APIs.
All APIs providing HTTP interface to access the endpoints can be wrapped by wrapi, so that you can quickly build your client application.
Endpoint Definition
Note: method & path/url are required.
method- Any one of the HTTP methods (default:"GET")path- route path to API Endpoint. Supportsexpressstyle path paramsquery- an object consists of name-value pairs. This is optional. This is useful where resources are identified via query string parametersoptions- options to override or to add specific to the API endpoint. E.g.{encoding:null}returns the response data asBufferurl- fully qualified uri string to override. This is useful in cases where an API call connects to a different endpoint
Client object
The wrapi object conveniently provides the client interface to the API. Create the object by calling new wrapi().
The constructor takes the following arguments:
baseURL- The base url for the API. E.g.https://api.github.com/endpoints- The JSON object listing the API endpoints. Provide{}- empty object or a partial list and thenregister(additional) endpoints lateroptions- Optional parameter.wrapiuses request module to connect to API server. Theoptionsparameter is the sameoptionsparameter used inrequest
Custom options
catchHTTP4xx5xx- Set this option totrueto treat HTTP status 4xx & 5xx as errors. Default value isfalse. If set, theerrargument in your callback function will contain the response body for 4xx & 5xx errors.
Register function
Add endpoints to client object.
register(functionName, endpointDefinition)functionName- Alias for the endpoint, also the name of the function to call.endpointDefinition- JSON object defining the endpoint.
Function calls
Call API endpoints via the function in the client object. Arguments to the function depend on the API declaration in the JSON.
Provide the arguments in the following order:
- named
paramsin the url path of the endpoint. eg.client.contributors('nodejs', 'node', // nodejs & node are path params query stringas an object with name-value pairs. eg.client.repositories({since:364} // ?since=364body- JSON content forPOSTorPUTmethods. Skip this argument if not required for the call.
- To POST
multipart/form-data, set this argument as{"formData" : multipartContent }
callback(err, data)- a callback function for the results to be returned. The callback is called when the response is fetched or if there is an error. This callback function gets the results of the response.To
pipethe results, pass a writable stream as the callback. Listen toerrorevents on outputstream to catch streaming errors. See example.
Examples
In examples folder.
Implementations
- Slack Web API
- Square Connect API
- Medium
- Twitter REST APIs
- Instagram API
- Genius API
- GIPHY API
- Riffsy's API
- Pokémon API