DEV Community

Safal Bhandari
Safal Bhandari

Posted on

Axios vs Fetch: Understanding the Differences in JavaScript HTTP Requests

When building modern web applications, making HTTP requests to interact with APIs is one of the most common tasks. In JavaScript, two popular ways to handle these requests are:

  1. Fetch API – A built-in browser feature.
  2. Axios – A popular third-party library.

While both achieve similar outcomes, they differ in syntax, features, and convenience. Let’s explore their differences in detail.


1. Setup and Availability

  • Fetch:

    • Native in modern browsers and Node.js (with node-fetch polyfill).
    • No installation required.
  fetch("https://jsonplaceholder.typicode.com/posts")
    .then((res) => res.json())
    .then((data) => console.log(data));
Enter fullscreen mode Exit fullscreen mode
  • Axios:

    • External library that must be installed.
    • Works both in the browser and Node.js out-of-the-box.
  npm install axios
Enter fullscreen mode Exit fullscreen mode
  import axios from "axios";

  axios.get("https://jsonplaceholder.typicode.com/posts")
    .then((res) => console.log(res.data));
Enter fullscreen mode Exit fullscreen mode

Winner: Fetch is built-in, but Axios is more feature-rich after installation.


2. Syntax and Readability

  • Fetch uses promises and requires converting the response manually into JSON.
  fetch("https://api.example.com/data")
    .then((res) => res.json())
    .then((data) => console.log(data))
    .catch((err) => console.error(err));
Enter fullscreen mode Exit fullscreen mode
  • Axios automatically parses JSON responses.
  axios.get("https://api.example.com/data")
    .then((res) => console.log(res.data))
    .catch((err) => console.error(err));
Enter fullscreen mode Exit fullscreen mode

Winner: Axios is shorter and cleaner.


3. Error Handling

  • Fetch only rejects on network errors, not for 4xx/5xx responses. You must handle HTTP errors manually.
  fetch("https://api.example.com/data")
    .then((res) => {
      if (!res.ok) throw new Error("Request failed: " + res.status);
      return res.json();
    })
    .then((data) => console.log(data))
    .catch((err) => console.error(err));
Enter fullscreen mode Exit fullscreen mode
  • Axios automatically throws errors for non-2xx status codes.
  axios.get("https://api.example.com/data")
    .then((res) => console.log(res.data))
    .catch((err) => console.error("Error:", err.response.status));
Enter fullscreen mode Exit fullscreen mode

Winner: Axios provides better error handling out-of-the-box.


4. Request Configuration

  • Fetch requires manual setup for headers, timeouts, and interceptors.
  fetch("https://api.example.com/data", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ name: "Safal" }),
  });
Enter fullscreen mode Exit fullscreen mode
  • Axios allows simpler request configuration and supports interceptors for request/response manipulation.
  axios.post("https://api.example.com/data", { name: "Safal" }, {
    headers: { "Content-Type": "application/json" },
  });
Enter fullscreen mode Exit fullscreen mode

Winner: Axios makes configurations easier and more scalable.


5. Features Comparison

Feature Fetch Axios
Built-in (no install)
Automatic JSON parsing
Error handling (HTTP)
Interceptors
Timeout support
Node.js support ❌ (needs polyfill)
Upload/Download progress

6. When to Use What?

  • Use Fetch if:

    • You want zero dependencies.
    • You’re making simple requests.
    • You need modern, browser-native API support.
  • Use Axios if:

    • You need robust error handling.
    • You’re building larger apps with complex API interactions.
    • You need features like interceptors, progress tracking, or Node.js support.

🚀 Conclusion

Both Fetch and Axios are excellent for making HTTP requests in JavaScript.

  • Fetch is lightweight and native, good for smaller tasks.
  • Axios is feature-rich and developer-friendly, ideal for larger applications.

Top comments (0)