DEV Community

pulkitgovrani
pulkitgovrani

Posted on

Difference Between Axios & Fetch in Javascript

In JavaScript, both Axios and the native Fetch API are used to make HTTP requests, but they have some differences in terms of features, ease of use, and functionality. Here's a breakdown:

1. Ease of Use:

  • Axios:

    Axios simplifies making requests and handling responses. It automatically parses JSON responses, making it easier to work with.

     axios.get('/api/user')
       .then(response => console.log(response.data))
       .catch(error => console.error(error));
    
  • Fetch:

    With fetch, you need to explicitly handle JSON parsing, which adds an extra step.

     fetch('/api/user')
       .then(response => response.json())
       .then(data => console.log(data))
       .catch(error => console.error(error));
    

2. Response Handling:

  • Axios: Axios automatically resolves the response and throws an error if the response status is outside the range of 2xx, so you can directly handle errors in the .catch() block.
  • Fetch:

    With fetch, non-2xx status codes (like 404 or 500) are not treated as errors. You have to manually check the response status and throw an error if needed.

     fetch('/api/user')
       .then(response => {
         if (!response.ok) throw new Error('Network response was not ok');
         return response.json();
       })
       .then(data => console.log(data))
       .catch(error => console.error(error));
    

3. Request and Response Interception:

  • Axios:

    Axios provides built-in interceptors, allowing you to modify requests or handle responses globally, which can be useful for adding authentication tokens, logging, etc.

     axios.interceptors.request.use(config => {
       config.headers['Authorization'] = 'Bearer token';
       return config;
     });
    
  • Fetch:

    Fetch does not have built-in interceptors, so you need to manually wrap the fetch call in a custom function if you need this behavior.

4. Browser Compatibility:

  • Axios: Axios works on older browsers (IE 11 and earlier) and handles polyfills internally.
  • Fetch: The Fetch API is not supported in Internet Explorer. You may need a polyfill like whatwg-fetch to support it in older browsers.

5. Data Handling:

  • Axios:

    Axios automatically stringifies data when making POST requests and sets the Content-Type to application/json. It also supports sending data in other formats like FormData with ease.

     axios.post('/api/user', { name: 'John' });
    
  • Fetch:

    In fetch, you need to manually stringify data and set the headers for POST requests.

     fetch('/api/user', {
       method: 'POST',
       headers: { 'Content-Type': 'application/json' },
       body: JSON.stringify({ name: 'John' })
     });
    

6. Canceling Requests:

  • Axios:

    Axios has built-in support for canceling requests using CancelToken.

     const source = axios.CancelToken.source();
     axios.get('/api/user', { cancelToken: source.token });
     source.cancel('Request canceled.');
    
  • Fetch:

    With fetch, you would need to use AbortController to cancel requests, which can be a bit more complex.

     const controller = new AbortController();
     fetch('/api/user', { signal: controller.signal });
     controller.abort();
    

7. Error Handling:

  • Axios: Axios automatically throws errors for non-2xx responses, and error handling is more consistent and centralized.
  • Fetch: Fetch requires more manual error handling, as it will only reject the promise for network errors, not for HTTP error status codes.

Conclusion:

  • Axios is more feature-rich, easy to use, and provides better abstraction for handling requests.
  • Fetch is a modern, native API that requires fewer dependencies but needs more manual work to handle certain features like errors, interceptors, and data handling.

If you prefer more control over your requests, you might stick with fetch. If you want something that simplifies HTTP requests, axios would be the better option.

Top comments (0)