Api client for lazy devs
Quickly write up any json api client for your purpose.
You can use both callbacks and promises for api client methods.
Installation
npm install apiapi
Example usage
Sample api client for github
var ApiClient = ; var github = baseUrl: 'https://api.github.com' // Define api methods methods: issues: 'get /repos/{user}/{repo}/issues' // Github api requires proper user-agent to work headers: 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36' ; // will request https://api.github.com/repos/boo1ean/casual/issues?state=closed and return json datagithub; // also you can use custom headers for each requestgithub;
Call methods passing callbacks
// Call method with paramsgithub; // Call method without paramsgithub
Transform response
You can specify response transform function:
// Will transform all methods responses (global transform) // ... { // res - request's response object // body = response body // requestParams = object passed to called method }; // transform response of specific method // ... methods: issues: 'get /issues' transformResponse: { return body; } ;
Transform request
You can decorate request params and headers with transformRequest
hooks.
// params - object passed to method// requestBody - object which will be used as request body// opts - additional request options (e.g. headers)var client = { // You should return overrides for given objects optsheaders = 'x-some-header': 'header-value' ; return params requestBody opts; };
Also you can perform method-specific transformRequest
hook:
transformRequest: { // ... } ;
If you want to create async request transformer, just return a promise
transformRequest: { return ...; } ;
Pick specific params for query string
var client = methods: issues: 'get /repos/{user}/{repo}/issues' query: // Will pick only these params for issues method and omit all others issues: 'state' ; // will request https://api.github.com/repos/boo1ean/casual/issues?state=closedclient;
Pick specific params for request body
var client = methods: createSomething: 'post /something' body: // Only title will be picked from method params and passed to request body createSomething: 'title' ;
Response type
By default response type is json
but you can change it if you want to one of arraybuffer
, blob
, document
, json
, text
.
// ... responseType: 'text';
Set error handler
Global error handler
var client = { console; };
method-specific error handlers:
var client = errorHandler: { console; } ;
Params validation
You can declare list of required params for methods
var client = methods: createIssue: 'post /issues' required: createIssue: 'name' 'body' 'author_id' ; // Automatically asserts params object for having required attrsclient;
Raw response body
By default response body is expected to be json and will be automatically parsed, to get raw body use flag:
var client = // ... rawResponse: true;
Debug
To see debug output just run you script like this:
DEBUG=apiapi node script.js
Debug output is provided by debug
Changelog
See CHANGELOG.md
License
MIT