Axios: що це, HTTP-запити та основи роботи з API

Автор: IT Sectr Опубліковано: 2026-03-07 Час читання: 8 хв

Axios — це HTTP-клієнт з відкритим вихідним кодом для JavaScript та TypeScript, який працює як у браузері, так і в середовищі Node.js. Бібліотека надає зручний Promise-based інтерфейс для надсилання HTTP-запитів з пітримкою перехоплювачів, автоматичної серіалізації JSON та можливістю скасування запитів. За даними офіційного репозиторію на GitHub, проєкт нараховує понад 100 тисяч зірок. Axios є однією з найпопулярніших бібліотек для роботи з REST API в екосистемі JavaScript.

Головне

  • Axios — HTTP-клієнт на Promise API для браузера та Node.js з пітримкою TypeScript
  • Перехоплювачі — дозволяють змінювати запити та відповіді до їх обробки в коді
  • Автоматична трансформація — бібліотека автоматично парсить JSON у відповіді та серіалізує дані в запиті
  • Скасування запитів — вбудований механізм AbortController для скасування завислих або непотрібних запитів
  • Завантаження файлів — пітримка прогресу завантаження через onUploadProgress та onDownloadProgress

Що таке Axios?

Axios — це бібліотека на JavaScript, призначена для виконання HTTP-запитів з браузера та середовища Node.js. Вона побудована поверх XMLHttpRequest у браузері та модуля http у Node.js, надаючи єдиний API для обох платформ.

Основна перевага Axios перед нативним fetch — автоматична обробка JSON, пітримка перехоплювачів та зручніша робота з помилками. На відміну від fetch, Axios не вимагає двох викликів .then для отримання JSON-тіла відповіді та викидає виняток при HTTP-помилках (4xx, 5xx) автоматично.

Бібліотека пітримує всі основні HTTP-методи: GET, POST, PUT, DELETE, PATCH та HEAD. Можє використовуватися як у простих проєктах, так і у великих корпоративних додатках із сотнями тисяч запитів щодня.

Ключові характеристики Axios

  • Promise API — всі операції повертають Promise, що спрощує асинхронний код
  • Пітримка TypeScript — повна типізація для всіх методів та конфігурацій
  • Перехоплювачі — middleware для обробки запитів та відповідей
  • Трансформація — автоматичне перетворення даних на вході та виході

Архітектура Axios та принцип роботи

Архітектура Axios заснована на концепції адаптерів (adapters). Бібліотека абстрагує транспортний рівень: у браузері використовується XMLHttpRequest, у Node.js — модуль http або https. Це дозволяє мати єдиний інтерфейс незалежно від середовища виконання.

Кожен запит проходить через ланцюжок перехоплювачів (interceptors), які можуть модифікувати конфігурацію запиту або відповіді. Після інтерсепторів запит передається в адаптер, який виконує реальний HTTP-виклик. Відповідь потім проходить через відповідні інтерсептори перед тим, як потрапити до коду додатку.

Життєвий цикл запиту Axios

  1. Створення конфігурації — метод, URL, заголовки, тіло запиту
  2. Request interceptor — модифікація конфігурації, додавання токенів
  3. HTTP-виклик — виконання через адаптер браузера або Node.js
  4. Response interceptor — трансформація відповіді, обробка помилок
  5. Повернення результату — Promise вирішується з даними або відхиляється

Основні можливості Axios

Axios включає безліч вбудованих можливостей, які роблять його зручним вибором для роботи з HTTP у мобільних та веб-додатках. Розглянемо ключові з них.

Автоматична трансформація даних

При надсиланні запиту Axios автоматично перетворює обєкт JavaScript у JSON-рядок за допомогою JSON.stringify. При отриманні відповіді бібліотека парсить JSON назад в обєкт. Це позбавляє розробника ручної серіалізації та десеріалізації даних.

Захист від CSRF

У браузерному середовищі Axios автоматично піставляє заголовки XSRF-TOKEN з cookie, захищаючи додаток від міжсайтової підробки запитів. Для цього достатньо налаштувати сервер на передачу токена в cookie з імѝям XSRF-TOKEN.

Таймаути та скасування запитів

Бібліотека пітримує встановлення таймауту через параметр timeout та скасування запиту через AbortController. Це особливо важливо в мобільних додатках з нестабільним зєднанням, де завислі запити споживають батарею та трафік.

Встановлення та налаштування Axios

Встановлення Axios виконується через будь-який пакетний менеджер. Бібліотека доступна в реєстрі npm та можє бути підключена як у Node.js, так і в браузерних проєктах. Для TypeScript типи включені в основний пакет, додаткових залежностей не потрібно.

Після встановлення можна створити екземпляр з базовою конфігурацією: базовий URL, таймаут за замовчуванням, спільні заголовки. Це дозволяє не повторювати однакові параметри в кожному запиті та централізовано керувати налаштуваннями HTTP-клієнта.

bash
# Встановлення через npm
npm install axios

# Встановлення через yarn
yarn add axios

# Встановлення через pnpm
pnpm add axios

Створення екземпляра з конфігурацією

Рекомендується створювати окремий екземпляр Axios для кожного API-сервісу. Це дозволяє задати базовий URL, стандартні заголовки та таймаут, які будуть застосовуватися до всіх запитів цього екземпляра без повторення в кожному виклику.

typescript
import axios from 'axios';

const api = axios.create({
  baseURL: 'https://api.example.com/v1',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  }
});

Приклади коду з Axios

Приклади запитів показують основні патерни використання Axios. Всі приклади використовують синтаксис async/await, який робить асинхронний код більш читабельним порівняно з ланцюжками .then().

GET-запит з параметрами

Для отримання даних з сервера використовується метод axios.get. Параметри запиту передаються через обєкт params, який автоматично перетворюється на query-string. Відповідь містить дані в полі data, статус у status та заголовки в headers.

typescript
interface User {
  id: number;
  name: string;
  email: string;
}

async function getUsers() {
  try {
    const response = await api.get<User[]>('/users', {
      params: { page: 1, limit: 10 }
    });
    return response.data;
  } catch (error) {
    console.error('Помилка завантаження користувачів', error);
    throw error;
  }
}

POST-запит з тілом

Для надсилання даних на сервер використовується axios.post. Другим аргументом передається обєкт з даними, який Axios автоматично серіалізує в JSON. Тип контенту Content-Type за замовчуванням встановлюється в application/json.

typescript
interface CreateUserDto {
  name: string;
  email: string;
  role: string;
}

async function createUser(data: CreateUserDto) {
  const response = await api.post<User>('/users', data);
  return response.data;
}

Перехоплювачі (Interceptors)

Інтерсептори — це middleware-функції, які виконуються для кожного запиту або відповіді. Вони дозволяють додавати токени авторизації, логувати запити, обробляти помилки централізовано. Request interceptor додає заголовок Authorization з токеном, вилученим зі сховища.

typescript
// Request interceptor — додає токен авторизації
api.interceptors.request.use(
  (config) => {
    const token = getToken();
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => Promise.reject(error)
);

// Response interceptor — обробляє 401 помилки
api.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.response?.status === 401) {
      redirectToLogin();
    }
    return Promise.reject(error);
  }
);

Обробка помилок в Axios

Обробка помилок в Axios будується на механізмі винятків. На відміну від fetch, Axios автоматично перехоплює HTTP-помилки (4xx, 5xx) і передає їх у catch-блок. Обєкт помилки містить інформацію про відповідь сервера, запит та контекст виконання.

Важливо розрізняти три типи помилок: помилка відповіді сервера (response), помилка запиту (request) та помилка налаштування (config). Перша виникає при успішному виконанні HTTP-виклику з кодом помилки, друга — при відсутності відповіді від сервера, третя — при невірній конфігурації запиту.

typescript
import axios, { AxiosError } from 'axios';

async function safeRequest() {
  try {
    return await api.get('/data');
  } catch (error) {
    if (error instanceof AxiosError) {
      if (error.response) {
        console.warn('Помилка відповіді', error.response.status);
      } else if (error.request) {
        console.warn('Немає відповіді від сервера');
      } else {
        console.warn('Помилка конфігурації');
      }
    }
  }
}
HTTP-метод Метод Axios Опис
GET axios.get(url, config) Отримання даних
POST axios.post(url, data, config) Створення ресурсу
PUT axios.put(url, data, config) Оновлення ресурсу
DELETE axios.delete(url, config) Видалення ресурсу
PATCH axios.patch(url, data, config) Часткове оновлення

Порівняння Axios з Fetch API

Порівняння Axios з нативним Fetch API допомагає зрозуміти, коли кожна технологія доречна. Fetch — вбудований у браузер API, що не вимагає встановлення. Axios — стороння бібліотека з додатковими можливостями. Для простих запитів достатньо fetch, для складних додатків з перехоплювачами та централізованою обробкою помилок зручніший Axios.

Fetch не вважає HTTP-помилки (4xx, 5xx) винятками — потрібно перевіряти response.ok. Fetch вимагає двох викликів .then() для отримання JSON: response.json() потім повертає Promise з даними. Axios робить це автоматично. Fetch не пітримує прогрес завантаження файлів без додаткового поліфіла. Axios має вбудовані onUploadProgress та onDownloadProgress.

У Node.js Fetch доступний з версії 18 як експериментальна функція, а Axios працює стабільно починаючи з Node.js 10. Для проєктів, що пітримують старі версії Node.js, вибір очевидний на користь Axios. Для сучасних браузерних проєктів без складної обробки запитів fetch можє бути достатнім.

Часті запитання

Чим Axios відрізняється від fetch?

Axios автоматично парсить JSON, викидає винятки при HTTP-помилках і пітримує перехоплювачі. Fetch вимагає двох викликів .then для JSON і не обробляє 4xx/5xx як помилки. Axios також простіше конфігурувати через обєкт налаштувань.

Чи потрібно встановлювати Axios для TypeScript окремо?

Ні, типи TypeScript включені в основний пакет axios. Додаткових залежностей на кшталт @types/axios встановлювати не потрібно — достатньо імпортувати axios з однойменного пакета.

Як скасувати запит в Axios?

Використовуйте AbortController: створіть екземпляр AbortController та передайте його signal у конфігурацію запиту. При виклику controller.abort() запит буде скасовано, а Promise відхилено з відповідним повідомленням про помилку.

Чи працює Axios з React Native?

Так, Axios повністю сумісний з React Native. Бібліотека використовує вбудований XMLHttpRequest, який доступний у середовищі React Native. Всі функції, включаючи перехоплювачі та скасування запитів, працюють без додаткового налаштування.

Як додати заголовки авторизації до всіх запитів?

Використовуйте request interceptor для централізованого додавання заголовка Authorization. Це позбавляє необхідності вказувати токен у кожному запиті окремо та дозволяє одноманітно обробляти закінчення терміну дії токена.

Підсумки

  • Axios — це HTTP-клієнт для JavaScript та TypeScript з Promise API та пітримкою браузера і Node.js
  • Перехоплювачі дозволяють централізовано модифікувати запити, обробляти помилки та додавати авторизацію
  • Автоматична трансформація JSON спрощує роботу з REST API без ручної серіалізації
  • Скасування запитів через AbortController запобігає витокам памєяті в мобільних та веб-додатках
  • Конфігурація екземпляра дозволяє задати базові параметри для всіх запитів до API
  • TypeScript пітримка вбудована в пакет — додаткові типи не потрібні
  • Axios залишається стандартом де-факто для HTTP-клієнтів в екосистемі JavaScript

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також