https://github.com/gravity-ui/axios-wrapper
https://github.com/gravity-ui/axios-wrapper
Last synced: 8 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/gravity-ui/axios-wrapper
- Owner: gravity-ui
- License: mit
- Created: 2021-12-01T08:53:40.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2025-01-20T08:53:59.000Z (over 1 year ago)
- Last Synced: 2025-01-22T11:46:09.764Z (over 1 year ago)
- Language: TypeScript
- Size: 590 KB
- Stars: 11
- Watchers: 8
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Authors: AUTHORS
Awesome Lists containing this project
README
# Axios Wrapper
This library provides a convenient wrapper around Axios adding automatic cancelling of concurrent requests
to its features.
## Install
```shell
npm install --save-dev @gravity-ui/axios-wrapper
```
## HTTP API
### Constructor parameters
##### config [optional]
The configuration of an `axios` instance.
##### collector [optional]
The configuration of requests collector is an object:
```json
{
"collectErrors": 10,
"collectRequests": 10
}
```
### Basic methods
Wrapper provides http-methods `get`, `head`, `put`, `post`, `delete`.
Methods `get` and `head` have the signature `(url, params, options)`; `put`, `post`, while the `delete` method
has `(url, data, params, options)` signature.
The `params` argument stands for query string parameters while `options` is a request settings.
Currently 4 request settings are supported:
- `concurrentId (string)`: optional request id
- `collectRequest (bool)`: optional flag, telling if the request should be logger (default `true`)
- `requestConfig (object)`: optional config with the custom request parameters
- `headers (object)`: optional object with custom request headers.
- `timeout (number)`: optional request timeout
- `onDownloadProgress (function)`: optional callback for processing file download progress
### Headers
The `setDefaultHeader({name (string), value (string), methods (array)})` method allows to add a default
request header.
Arguments `name` and `value` are required, optional argument `methods` specified all methods which get those
default headers (by default all methods will get those headers).
### CSRF
The `setCSRFToken` method allows specifying CSRF-token, which will be added to all `put`, `post` and `delete`
requests.
### Concurrent requests
Sometimes it is better to cancel the request in flight if its results are no longer needed. To make this
happen, one should pass to request's `options` the `concurrentId` id. When the next request with the same
`concurrentId` occurs the previous request with that id will be cancelled.
One cancel a request manually as well by invoking the `cancelRequest(concurrentId)` method.
### Collecting requests
It is possible to set up requests collection into the local storage using the `collector` option. It stores
all requests and errors separately. The following `apiInstance` will keep 10 last requests (both successful
and not) and 10 last erroneous requests.
```javascript
const apiInstance = new API({
collector: {
collectErrors: 10,
collectRequests: 10
}
});
```
To obtain saved requests one have to invoke the `getCollectedRequests` method which returns the object
`{errors: [...], requests: [...]}`.
### Usage
The suggested usage is to subclass the base `AxiosWrapper` class:
```javascript
export class API extends AxiosWrapper {
getProjects() {
return this.get('/projects');
}
getSensors({project, selectors}) {
return this.get(`/projects/${project}/sensors`, {selectors, pageSize: 200});
}
getNames({project, selectors}) {
return this.get(`/projects/${project}/sensors/names`, {selectors});
}
getLabels({project, names, selectors}) {
return this.get(`/projects/${project}/sensors/labels`, {names, selectors});
}
}
```
When the `baseURL` parameter is passed into `axios` config, all requested pathnames will be appended to it.
```javascript
const apiInstance = new API({
config: {
baseURL: '/api/v2'
}
});
```