Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/ restql Public

RESTful API Resolver for Nested-Linked Resources | ๐Ÿ•ธ ๐Ÿ•ท

License

Notifications You must be signed in to change notification settings

relztic/restql

Repository files navigation

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! ๐ŸŒฎ ๐Ÿด ๐Ÿ’จ

About

RESTful API Resolver for Nested-Linked Resources | ๐Ÿ•ธ ๐Ÿ•ท

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

AltStyle ใซใ‚ˆใฃใฆๅค‰ๆ›ใ•ใ‚ŒใŸใƒšใƒผใ‚ธ (->ใ‚ชใƒชใ‚ธใƒŠใƒซ) /