npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

wrapi

v1.0.2

Published

Wrapper for calling Restful API

Downloads

248

Readme

wrapi

Wrap Restful API endpoints as callable functions.

Create a Rest API SDK under 3 minutes.

NPM version Build Status Coverage Status Known Vulnerabilities

With wrapi you make calls to HTTP based APIs just like ordinary JavaScript functions.


Installation

$ npm install wrapi --save

Or

$ yarn add wrapi

Easy Start

  1. Create a JSON file listing all API endpoints you want to work with.
  2. Wrap endpoints with wrapi.
  3. 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 API

Register

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. Supports express style path params
  • query - an object consists of name-value pairs. This is optional. This is useful where resources are identified via query string parameters
  • options - options to override or to add specific to the API endpoint. E.g. {encoding:null} returns the response data as Buffer
  • url - 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:

  1. baseURL - The base url for the API. E.g. https://api.github.com/
  2. endpoints - The JSON object listing the API endpoints. Provide {} - empty object or a partial list and then register (additional) endpoints later
  3. options - Optional parameter. wrapi uses request module to connect to API server. The options parameter is the same options parameter used in request

Custom options

  1. catchHTTP4xx5xx - Set this option to true to treat HTTP status 4xx & 5xx as errors. Default value is false. If set, the err argument in your callback function will contain the response body for 4xx & 5xx errors.

Register function

Add endpoints to client object.

register(functionName, endpointDefinition)
  1. functionName - Alias for the endpoint, also the name of the function to call.
  2. 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:

  1. named params in the url path of the endpoint. eg. client.contributors('nodejs', 'node', // nodejs & node are path params
  2. query string as an object with name-value pairs. eg. client.repositories({since:364} // ?since=364
  3. body - JSON content for POST or PUT methods. Skip this argument if not required for the call.
  • To POST multipart/form-data, set this argument as {"formData" : multipartContent }
  1. 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 pipe the results, pass a writable stream as the callback. Listen to error events on outputstream to catch streaming errors. See example.

Examples

In examples folder.

Implementations

License

MIT