Fetch-on-REST is a RESTful API wrapper built around window.fetch.
GitHub provides a polyfill for fetch to work on all browsers. Fetch is also available on react-native by default.
This wrapper is intended to work on both the browsers as well as with react-native.
Using Fetch-on-REST is as simple as passing the data and handling the JSON response. Headers are automatically set to accept JSON and the responses are json objects.
var Rest = require('fetch-on-rest');
var api = new Rest('/api/v2');
api.get('users', {name: 'foo'}).then(function(response) {});
// GET request on '/api/v2/users?name=foo'
api.post('posts', {title: 'foo', content: 'bar'}).then(function(response) {});
// POST request on '/api/v2/posts' with data {"title": "foo", "content": "bar"}
new Rest(basePath="/", addOptions=function() {}, useTrailingSlashes=false):
basePath
: Is a string. Can be absolute or relative path.
addOptions(defaultOptions, url)
: Is an optional function. Can be used to modify the headers.
Should modify the received defaultOptions
object and not return a new object.
useTrailingSlashes:
Default false. By setting true, .get('users')
will hit the url /users/
.
Example of addOptions:
// Adding same-origin and X-CSRFToken token
function addOptions(defaults, url) {
defaults.credentials = 'same-origin';
if(defaults.method != 'get')
defaults.headers['X-CSRFToken'] = 'AUTHTOKENX';
}
var useTrailingSlashes = true;
var api = new Rest('/', addOptions, useTrailingSlashes);
.get(segments, query)
.post(segments, data, query)
.put(segments, data, query)
.patch(segments, data, query)
.delete(segments, query)
.rawGet(segments, query)
All requests return a promise object.
The promise object resolves to JSON response (except rawGet
which resolves to text).
URL parsing is handled using the exhaustive URI.js library.
segments: segments
are the parts of url. Can be array or string.
query: query
is the search or GET params part of the url. Should be a key-value object.
data: data
is the json body to be sent in the request.
Though we intend to keep the library minimalistic, we would love to see the pull-requests and discuss new issues.
Thanks for checking it out.