Axios: co to jest, żądania HTTP i podstawy pracy z API

Autor: IT Sectr Opublikowano: 2026-03-07 Czas czytania: 8 min

Axios to klient HTTP o otwartym kodzie źródłowym dla JavaScript i TypeScript, działający zarówno w przeglądarce, jak i w środowisku Node.js. Biblioteka udostępnia wygodny interfejs oparty na Promise do wysyłania żądań HTTP z obsługą przechwytywaczy, automatyczną serializacją JSON i możliwością anulowania żądań. Według danych oficjalnego repozytorium na GitHub, projekt ma ponad 100 tysięcy gwiazdek. Axios jest jedną z najpopularniejszych bibliotek do pracy z REST API w ekosystemie JavaScript.

Najważniejsze

  • Axios — klient HTTP oparty na Promise API dla przeglądarki i Node.js z obsługą TypeScript
  • Przechwytywacze — interceptory umożliwiają modyfikację żądań i odpowiedzi przed ich przetworzeniem w kodzie
  • Automatyczna transformacja — biblioteka automatycznie parsuje JSON w odpowiedzi i serializuje dane w żądaniu
  • Anulowanie żądań — wbudowany mechanizm AbortController do anulowania zawieszonych lub niepotrzebnych żądań
  • Przesyłanie plików — obsługa postępu przesyłania przez onUploadProgress i onDownloadProgress

Czym jest Axios?

Axios to biblioteka JavaScript przeznaczona do wykonywania żądań HTTP z przeglądarki i środowiska Node.js. Jest zbudowana na bazie XMLHttpRequest w przeglądarce i modułu http w Node.js, udostępniając jednolity API dla obu platform.

Główną zaletą Axios w porównaniu z natywnym fetch jest automatyczna obsługa JSON, wsparcie dla przechwytywaczy i wygodniejsza praca z błędami. W przeciwieństwie do fetch, Axios nie wymaga dwóch wywołań .then do uzyskania treści JSON odpowiedzi i automatycznie zgłasza wyjątek przy błędach HTTP (4xx, 5xx).

Biblioteka obsługuje wszystkie główne metody HTTP: GET, POST, PUT, DELETE, PATCH i HEAD. Może być używana zarówno w prostych projektach, jak i w dużych aplikacjach korporacyjnych z setkami tysięcy żądań dziennie.

Kluczowe cechy Axios

  • Promise API — wszystkie operacje zwracają Promise, co upraszcza kod asynchroniczny
  • Obsługa TypeScript — pełna typizacja dla wszystkich metod i konfiguracji
  • Interceptory — middleware do przetwarzania żądań i odpowiedzi
  • Transformacja — automatyczne przekształcanie danych na wejściu i wyjściu

Architektura Axios i zasada działania

Architektura Axios opiera się na koncepcji adapterów (adapters). Biblioteka abstrahuje warstwę transportową: w przeglądarce używany jest XMLHttpRequest, w Node.js — moduł http lub https. Pozwala to na jednolity interfejs niezależnie od środowiska wykonawczego.

Każde żądanie przechodzi przez łańcuch przechwytywaczy (interceptors), które mogą modyfikować konfigurację żądania lub odpowiedzi. Po przechwytywaczach żądanie trafia do adaptera, który wykonuje rzeczywiste wywołanie HTTP. Odpowiedź następnie przechodzi przez interceptory odpowiedzi, zanim trafi do kodu aplikacji.

Cykl życia żądania Axios

  1. Tworzenie konfiguracji — metoda, URL, nagłówki, treść żądania
  2. Interceptor żądania — modyfikacja konfiguracji, dodawanie tokenów
  3. Wywołanie HTTP — wykonanie przez adapter przeglądarki lub Node.js
  4. Interceptor odpowiedzi — transformacja odpowiedzi, obsługa błędów
  5. Zwrot wyniku — Promise jest rozwiązywany z danymi lub odrzucany

Główne możliwości Axios

Axios zawiera wiele wbudowanych funkcji, które czynią go wygodnym wyborem do pracy z HTTP w aplikacjach mobilnych i webowych. Omówmy najważniejsze z nich.

Automatyczna transformacja danych

Podczas wysyłania żądania Axios automatycznie przekształca obiekt JavaScript na ciąg JSON za pomocą JSON.stringify. Przy odbieraniu odpowiedzi biblioteka parsuje JSON z powrotem na obiekt. To zwalnia programistę z ręcznej serializacji i deserializacji danych.

Ochrona przed CSRF

W środowisku przeglądarki Axios automatycznie dodaje nagłówki XSRF-TOKEN z ciasteczka, chroniąc aplikację przed fałszowaniem żądań międzywitowych. W tym celu wystarczy skonfigurować serwer do przesyłania tokena w ciasteczku o nazwie XSRF-TOKEN.

Timeout i anulowanie żądań

Biblioteka obsługuje ustawienie timeoutu przez parametr timeout oraz anulowanie żądania przez AbortController. Jest to szczególnie ważne w aplikacjach mobilnych z niestabilnym połączeniem, gdzie zawieszone żądania pochłaniają baterię i transfer danych.

Instalacja i konfiguracja Axios

Instalacja Axios odbywa się za pomocą dowolnego menedżera pakietów. Biblioteka jest dostępna w rejestrze npm i może być podłączona zarówno w Node.js, jak i w projektach przeglądarkowych. Dla TypeScript typy są dołączone do głównego pakietu, nie są wymagane dodatkowe zależności.

Po instalacji można utworzyć instancję z podstawową konfiguracją: podstawowy URL, domyślny timeout, wspólne nagłówki. Pozwala to nie powtarzać tych samych parametrów w każdym żądaniu i centralnie zarządzać ustawieniami klienta HTTP.

bash
# Instalacja przez npm
npm install axios

# Instalacja przez yarn
yarn add axios

# Instalacja przez pnpm
pnpm add axios

Tworzenie instancji z konfiguracją

Zaleca się tworzenie osobnej instancji Axios dla każdego serwisu API. Pozwala to ustawić podstawowy URL, standardowe nagłówki i timeout, które będą stosowane do wszystkich żądań tej instancji bez powtarzania w każdym wywołaniu.

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'
  }
});

Przykłady kodu z Axios

Przykłady żądań pokazują główne wzorce użycia Axios. Wszystkie przykłady używają składni async/await, która czyni kod asynchroniczny bardziej czytelnym w porównaniu z łańcuchami .then().

Żądanie GET z parametrami

Do pobierania danych z serwera używana jest metoda axios.get. Parametry żądania są przekazywane przez obiekt params, który jest automatycznie przekształcany na query-string. Odpowiedź zawiera dane w polu data, status w status i nagłówki w 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('Błąd ładowania użytkowników', error);
    throw error;
  }
}

Żądanie POST z ciałem

Do wysyłania danych na serwer używana jest axios.post. Drugim argumentem przekazywany jest obiekt z danymi, który Axios automatycznie serializuje do JSON. Typ treści Content-Type domyślnie ustawiany jest na 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;
}

Przechwytywacze (Interceptors)

Interceptory to funkcje middleware, które są wykonywane dla każdego żądania lub odpowiedzi. Umożliwiają dodawanie tokenów autoryzacji, logowanie żądań, centralną obsługę błędów. Interceptor żądania dodaje nagłówek Authorization z tokenem pobranym z magazynu.

typescript
// Interceptor żądania — dodaje token autoryzacji
api.interceptors.request.use(
  (config) => {
    const token = getToken();
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => Promise.reject(error)
);

// Interceptor odpowiedzi — obsługuje błędy 401
api.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.response?.status === 401) {
      redirectToLogin();
    }
    return Promise.reject(error);
  }
);

Obsługa błędów w Axios

Obsługa błędów w Axios opiera się na mechanizmie wyjątków. W przeciwieństwie do fetch, Axios automatycznie przechwytuje błędy HTTP (4xx, 5xx) i przekazuje je do bloku catch. Obiekt błędu zawiera informacje o odpowiedzi serwera, żądaniu i kontekście wykonania.

Ważne jest rozróżnienie trzech typów błędów: błąd odpowiedzi serwera (response), błąd żądania (request) i błąd konfiguracji (config). Pierwszy występuje przy pomyślnym wykonaniu wywołania HTTP z kodem błędu, drugi — przy braku odpowiedzi z serwera, trzeci — przy nieprawidłowej konfiguracji żądania.

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('Błąd odpowiedzi', error.response.status);
      } else if (error.request) {
        console.warn('Brak odpowiedzi z serwera');
      } else {
        console.warn('Błąd konfiguracji');
      }
    }
  }
}
Metoda HTTP Metoda Axios Opis
GET axios.get(url, config) Pobieranie danych
POST axios.post(url, data, config) Tworzenie zasobu
PUT axios.put(url, data, config) Aktualizacja zasobu
DELETE axios.delete(url, config) Usuwanie zasobu
PATCH axios.patch(url, data, config) Częściowa aktualizacja

Porównanie Axios z Fetch API

Porównanie Axios z natywnym Fetch API pomaga zrozumieć, kiedy każda technologia jest odpowiednia. Fetch to wbudowane w przeglądarkę API, które nie wymaga instalacji. Axios to biblioteka zewnętrzna z dodatkowymi funkcjami. Do prostych żądań wystarczy fetch, do złożonych aplikacji z przechwytywaczami i centralną obsługą błędów wygodniejszy jest Axios.

Fetch nie traktuje błędów HTTP (4xx, 5xx) jako wyjątków — należy sprawdzać response.ok. Fetch wymaga dwóch wywołań .then() do uzyskania JSON: response.json() następnie zwraca Promise z danymi. Axios robi to automatycznie. Fetch nie obsługuje postępu przesyłania plików bez dodatkowego polyfill. Axios ma wbudowane onUploadProgress i onDownloadProgress.

W Node.js Fetch jest dostępny od wersji 18 jako funkcja eksperymentalna, a Axios działa stabilnie od Node.js 10. Dla projektów wspierających starsze wersje Node.js wybór jest oczywisty na korzyść Axios. Dla nowoczesnych projektów przeglądarkowych bez złożonego przetwarzania żądań fetch może być wystarczający.

Często zadawane pytania

Czym Axios różni się od fetch?

Axios automatycznie parsuje JSON, zgłasza wyjątki przy błędach HTTP i obsługuje przechwytywacze. Fetch wymaga dwóch wywołań .then dla JSON i nie traktuje 4xx/5xx jako błędów. Axios jest także łatwiejszy w konfiguracji przez obiekt ustawień.

Czy trzeba instalować Axios dla TypeScript osobno?

Nie, typy TypeScript są dołączone do głównego pakietu axios. Dodatkowe zależności w rodzaju @types/axios nie są wymagane — wystarczy zaimportować axios z pakietu o tej samej nazwie.

Jak anulować żądanie w Axios?

Użyj AbortController: utwórz instancję AbortController i przekaż jej signal do konfiguracji żądania. Po wywołaniu controller.abort() żądanie zostanie anulowane, a Promise odrzucone z odpowiednim komunikatem błędu.

Czy Axios działa z React Native?

Tak, Axios jest w pełni kompatybilny z React Native. Biblioteka korzysta z wbudowanego XMLHttpRequest, który jest dostępny w środowisku React Native. Wszystkie funkcje, w tym przechwytywacze i anulowanie żądań, działają bez dodatkowej konfiguracji.

Jak dodać nagłówki autoryzacji do wszystkich żądań?

Użyj interceptora żądania do centralnego dodawania nagłówka Authorization. To zwalnia z konieczności podawania tokena w każdym żądaniu osobno i pozwala jednolicie obsługiwać wygaśnięcie tokena.

Podsumowanie

  • Axios to klient HTTP dla JavaScript i TypeScript z Promise API i obsługą przeglądarki i Node.js
  • Przechwytywacze umożliwiają centralną modyfikację żądań, obsługę błędów i dodawanie autoryzacji
  • Automatyczna transformacja JSON upraszcza pracę z REST API bez ręcznej serializacji
  • Anulowanie żądań przez AbortController zapobiega wyciekom pamięci w aplikacjach mobilnych i webowych
  • Konfiguracja instancji pozwala ustawić podstawowe parametry dla wszystkich żądań do API
  • TypeScript jest obsługiwany wbudowanie w pakiecie — dodatkowe typy nie są wymagane
  • Axios pozostaje standardem de facto dla klientów HTTP w ekosystemie JavaScript

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również