axios-retry vs retry-axios
HTTP Request Retry Libraries Comparison
1 Year
axios-retryretry-axiosSimilar Packages:
What's HTTP Request Retry Libraries?

Both axios-retry and retry-axios are libraries designed to enhance the functionality of Axios, a popular HTTP client for making requests in JavaScript. They provide mechanisms to automatically retry failed requests, which can be particularly useful in scenarios where network reliability is a concern or when dealing with transient errors. While both libraries serve a similar purpose, they differ in their implementation and additional features, making them suitable for different use cases.

Package Weekly Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
axios-retry3,627,9811,93033.6 kB506 months agoApache-2.0
retry-axios886,67149336.4 kB34a year agoApache-2.0
Feature Comparison: axios-retry vs retry-axios

Retry Logic

  • axios-retry:

    axios-retry implements a simple retry mechanism that allows you to specify which HTTP status codes should trigger a retry. It provides a straightforward API to configure the number of retries and the conditions under which they should occur, making it easy to use for basic scenarios.

  • retry-axios:

    retry-axios offers a more sophisticated retry strategy, including support for exponential backoff, which increases the wait time between retries. This can help reduce the load on the server and improve the chances of a successful request after a failure.

Configuration Options

  • axios-retry:

    axios-retry allows you to configure the retry count and the retry condition directly through its API. You can easily set the maximum number of retries and specify which response status codes should be retried, providing a simple yet effective configuration.

  • retry-axios:

    retry-axios provides a more extensive set of configuration options, including the ability to customize the retry delay and the option to specify different retry strategies for different types of requests. This flexibility allows for more tailored retry behavior based on application needs.

Integration with Axios

  • axios-retry:

    axios-retry is designed specifically for Axios and integrates seamlessly with it. It requires minimal setup and can be added to existing Axios instances without significant changes to the codebase, making it a convenient choice for existing Axios users.

  • retry-axios:

    retry-axios also integrates with Axios but adds additional features that may require more configuration. It is suitable for new projects or when you need the extra capabilities it offers, but it may involve a slightly steeper learning curve.

Error Handling

  • axios-retry:

    axios-retry provides basic error handling by allowing retries for specific HTTP errors. However, it does not offer advanced error handling features, which may require additional logic in your application to manage errors effectively.

  • retry-axios:

    retry-axios includes enhanced error handling capabilities, allowing you to define custom error handling logic based on the type of error encountered. This can be particularly useful for applications that need to respond differently to various error scenarios.

Community and Support

  • axios-retry:

    axios-retry has a smaller community compared to retry-axios, but it is well-documented and maintained. It is suitable for projects that require a simple and reliable retry mechanism without the need for extensive community support.

  • retry-axios:

    retry-axios has a larger community and more extensive documentation, which can be beneficial for developers looking for support and examples. It is a good choice for projects that may require more complex retry logic and community-driven enhancements.

How to Choose: axios-retry vs retry-axios
  • axios-retry:

    Choose axios-retry if you want a lightweight solution that integrates seamlessly with Axios and provides basic retry functionality without additional dependencies. It is ideal for straightforward use cases where you need to retry failed requests based on status codes or network errors.

  • retry-axios:

    Choose retry-axios if you require more advanced features such as exponential backoff, custom retry conditions, and the ability to handle retries for specific HTTP methods. It is suitable for applications that need more control over the retry logic and want to customize the behavior based on different scenarios.

README for axios-retry

axios-retry

Node.js CI

Axios plugin that intercepts failed requests and retries them whenever possible.

Installation

npm install axios-retry

Usage

// CommonJS
// const axiosRetry = require('axios-retry').default;

// ES6
import axiosRetry from 'axios-retry';

axiosRetry(axios, { retries: 3 });

axios.get('http://example.com/test') // The first request fails and the second returns 'ok'
  .then(result => {
    result.data; // 'ok'
  });

// Exponential back-off retry delay between requests
axiosRetry(axios, { retryDelay: axiosRetry.exponentialDelay });

// Liner retry delay between requests
axiosRetry(axios, { retryDelay: axiosRetry.linearDelay() });

// Custom retry delay
axiosRetry(axios, { retryDelay: (retryCount) => {
  return retryCount * 1000;
}});

// Works with custom axios instances
const client = axios.create({ baseURL: 'http://example.com' });
axiosRetry(client, { retries: 3 });

client.get('/test') // The first request fails and the second returns 'ok'
  .then(result => {
    result.data; // 'ok'
  });

// Allows request-specific configuration
client
  .get('/test', {
    'axios-retry': {
      retries: 0
    }
  })
  .catch(error => { // The first request fails
    error !== undefined
  });

Note: Unless shouldResetTimeout is set, the plugin interprets the request timeout as a global value, so it is not used for each retry but for the whole request lifecycle.

Options

| Name | Type | Default | Description | | --- | --- | --- | --- | | retries | Number | 3 | The number of times to retry before failing. 1 = One retry after first failure | | retryCondition | Function | isNetworkOrIdempotentRequestError | A callback to further control if a request should be retried. By default, it retries if it is a network error or a 5xx error on an idempotent request (GET, HEAD, OPTIONS, PUT or DELETE). | | shouldResetTimeout | Boolean | false | Defines if the timeout should be reset between retries | | retryDelay | Function | function noDelay() { return 0; } | A callback to further control the delay in milliseconds between retried requests. By default there is no delay between retries. Another option is exponentialDelay (Exponential Backoff) or linearDelay. The function is passed retryCount and error. | | onRetry | Function | function onRetry(retryCount, error, requestConfig) { return; } | A callback to notify when a retry is about to occur. Useful for tracing and you can any async process for example refresh a token on 401. By default nothing will occur. The function is passed retryCount, error, and requestConfig. | | onMaxRetryTimesExceeded | Function | function onMaxRetryTimesExceeded(error, retryCount) { return; } | After all the retries are failed, this callback will be called with the last error before throwing the error. | | validateResponse | Function \| null | null | A callback to define whether a response should be resolved or rejected. If null is passed, it will fallback to the axios default (only 2xx status codes are resolved). |

Testing

Clone the repository and execute:

npm test

Contribute

  1. Fork it: git clone https://github.com/softonic/axios-retry.git
  2. Create your feature branch: git checkout -b feature/my-new-feature
  3. Commit your changes: git commit -am 'Added some feature'
  4. Check the build: npm run build
  5. Push to the branch: git push origin my-new-feature
  6. Submit a pull request :D