
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
Interact with a Rest-API. Works on client (browser) and server (node.js).
$ npm install rest-js
If not done yet you first need to install the global dependencies:
$ npm install -g jake browserify brfs istanbul
Then to run the tests do:
$ jake test
To run the test with code coverage:
$ istanbul cover jake test
By default Browser-sides tests will run in the chrome browser. You can override the browser(s) to use by providing a "browser" option containing a comma seperated list of browser executables:
$ jake test browser=chrome,firefox
To skip browser testing do:
$ jake test browser=none
var rest = require('rest-js');
var restApi = rest('https://api.github.com/', {
crossDomain: true
});
restApi.read('users/der-On/repos', function(error, data) {
...
});
All methods also return a promise.
restApi.read('/cats', [options, callback]); // GET -> /cats
restApi.get(/*...*/); // alias to .read
restApi.remove('/cats/10', [options, callback]); // DELETE -> /cats/10
restApi.del(/*...*/); // alias to .remove
restApi.create('/cats', [options, callback]); // POST -> /cats
restApi.post(/*...*/); // alias to .create
restApi.update('/cats/10', [options, callback]); // PUT -> /cats/10
restApi.put(/*...*/); // alias to .update
You can also send a rest-request with any available HTTP method using
restApi.request(method, path, [option, callback]);
You can pass a data-Object within the options.
restApi.create('/cats', {
data: { name: 'Minka', age: 4 }
}, function(error, data) {
...
});
var restApi = rest('https://api.github.com/', {
defaultParams: { ... }, // parameters that should be send with every request
defaultFormat: 'json', // (default = 'json') default file format to use, will be appended as a suffix to the requested path (e.g. /cats -> /cats.json)
defaultDataType: 'json', // (default = 'json') default expected data type
crossDomain: false, // (default = false)
cacheLifetime: 5000, // (default = 0) lifetime of URL based response cache in ms (only GET requests are cached). If set to 0 no caching will happen.
});
Middlewares or filters allow transormation or manipulation of request and response data.
They are simple callback functions that get passed two or more parameters.
The last parameter is always a callback function that needs to be called, once the filter has done it's work. If you pass an error to the callback it will be passed to the error middleware.
Middlewares are executed in the same order they got appended. So if a previously appended middleware executes you get passed the already transformed data in the next middleware.
Example:
restApi.use(function(request, next) {
var transformedUrl = request.url.replace('bar', 'foo');
nexst();
});
You can add middlewares using the .use() method:
restApi.use(callback); // add a middleware
You can also remove already appended filters:
restApi.unuse(callback); // remove a middleware
Rest auto appends the following filters already:
Method-Fallback middleware that adds the '_method' URL parameter containing the method to use for the request. This is an approved convention to workaround the missing capabilities of browsers to send others then GET and POST requests.
JSON Request-Data middleware that tries to stringify outgoing data to JSON if the request data type is 'json'.
JSON Response-Data middleware that tries to parse incoming response data using JSON.stringify() if the expecte response data type is 'json'.
Generic Error middleware that creates an error for each response with a status code >= 400. It tries to detect the error message from the response data.
You can pass in options for each CRUD method or Rest.request(). These options are as follows:
restApi.read('/cats', {
baseUrl: "...", // override the baseUrl passed to the Rest() constructor
format: "json", // file format (will be attached as suffix to the URL, e.g. /cats -> /cats.json)
query: {...}, // query object
sort: {...}, // sort object, keys are property names and values either 'asc' or 'desc'
limit: 10, // limit number of results, translates to the URL parameter 'limit'
offset: 100, // skip first N results, translates to the URL parameter 'offset'
skip: 100, // same as offset, but translates to the URL parameter 'skip'
page: 10, // display page N of results, when using pagination, translates to the URL parameter 'page'
perPage: 100, // display N results per page, when using pagination, translates to the URL parameter 'perPage'
params: {...}, // all additional URL parameters to be send with the request
headers: {...}, // additional request headers
nocase: true, // (default = false) if true, case insensitive queries are created, translates to the URL parameter 'nocase'
data: {...}, // data to be send with the request body (only for POST, PUT, UPDATE requests)
forceUncached: true, // (default = true) if true a timestamp parameter will be attached to the URL to prevent agressive browser caching
dataType: 'json', // the datatype to expect from the server, it will try to convert to this datatype. Possible values are: 'xml', 'html', 'json', 'jsonp', 'script', 'text', 'binary'
crossDomain: true, // (default = false)
noCache: true, // (default = false) if true the response data will not be cached, even if the request cache is enabled
}, function(error, data) {
...
});
FAQs
Interact with a Rest-API. Works on client and server (node.js).
We found that rest-js demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.