restql

RESTful API Resolver for Nested-Linked Resources | 🕸 🕷

  • restql

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
restql
16181.1.64 years ago6 years agoMinified + gzip package size for restql in KB

Readme

RestQL.js
RESTful API Resolver for Nested-Linked Resources | 🕸 🕷
npm build maintainability coverage code style
RestQL allows you to dynamically resolve the nested-linked resources of a RESTful API.
By specifying a set of properties to describe the paths.

Installation

npm

npm install restql --save

Yarn

yarn add restql

CDN

<script src="https://unpkg.com/restql/dist/umd/index.min.js"></script>

Parameters

resource

{string} The resource to fetch.
Description
Self-explanatory.
e.g.:
'https://pokeapi.co/api/v2/pokemon/1/'

resolver

{Object} The resolver to apply.
Description
At each level, each property describes a path to the nested resources within the current one.
RestQL resolves the sames and call the subsequent resolver against them...
Until the base case (null) is reached; from which it returns back the merged responses.
Quantifiers
Following is a table of the quantifiers you can use:
| Quantifier | Description | | --- | --- | | [] | Collection of properties. | | ? | Optional property. |
e.g.:
{
  'abilities[]?.ability.url': {
    'generation.url': {
      'main_region.url': null,
    },
  },
  'stats[].stat.url?': {
    'affecting_natures.increase[].url': null,
    'affecting_natures.decrease[].url': null,
  },
  'moves[].move?.url': null,
}

[options]

{Object} The options to bypass.
Description
Request Config
e.g.:
{
  // ...
}

Usage

// External Packages
import restql from 'restql'

/**
 * @constant {string} resource The resource to fetch.
 */
const resource = 'https://pokeapi.co/api/v2/pokemon/1/'

/**
 * @constant {Object} resolver The resolver to apply.
 */
const resolver = {
  'abilities[]?.ability.url': {
    'generation.url': {
      'main_region.url': null,
    },
  },
  'stats[].stat.url?': {
    'affecting_natures.increase[].url': null,
    'affecting_natures.decrease[].url': null,
  },
  'moves[].move?.url': null,
}

/**
 * @constant {Object} options The options to bypass.
 */
const options = {
  // ...
};

(async () => {
  try {
    const data = await restql(resource, resolver, options)

    console.log(data)
  } catch (error) {
    console.error(error.message)
  }
})()

Test RestQL in your browser.

Roadmap

- Support for authentication - Support for optional resolvers - Improve package bundler - Ability to cache responses - Support for recursive resolvers
Take 🍰, Folks! 🌮 🐴 💨