RESTful API Resolver for Nested-Linked Resources | 🕸 🕷
RestQL allows you to dynamically resolve the nested-linked resources of a RESTful API.
By specifying a set of properties to describe the paths.
npm install restql --save
yarn add restql
<script src="https://unpkg.com/restql/dist/umd/index.min.js"></script>
{string} The resource to fetch.
Description
Self-explanatory.
e.g.:
'https://pokeapi.co/api/v2/pokemon/1/'
{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,
}
{Object} The options to bypass.
Description
e.g.:
{
// ...
}
// 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)
}
})()
Support for authenticationSupport for optional resolversImprove package bundlerAbility to cache responses- Support for recursive resolvers
Take 🍰, Folks! 🌮 🐴 💨