Axios i Fetch

Frontend SELF PL
Poziom 44 , Lekcja 0
Dostępny

5.1 Fetch API

Do wykonywania requestów HTTP w JavaScript często używa się dwóch bibliotek: wbudowanej funkcji fetch i zewnętrznej biblioteki Axios. Obie oferują potężne i elastyczne możliwości do interakcji z API i innymi zasobami sieciowymi.

Fetch API — to wbudowany w przeglądarkę sposób wykonywania requestów HTTP. Opiera się na promesach i oferuje elastyczne i nowoczesne podejście do pracy z requestami sieciowymi.

Prosty przykład zapytania fetch:

    
      let promise = fetch(url, {method, headers,
        body})
    
  

Główne koncepcje Fetch:

  • fetch(url, options): główna metoda do wykonywania requestów HTTP
  • Zwraca promise, który zwraca obiekt Response

Przykład prostego zapytania GET przy użyciu Fetch:

JavaScript
    
      fetch('https://jsonplaceholder.typicode.com/posts/1')
        .then(response => {
          if (!response.ok) {
            throw new Error('Błąd sieci: otrzymano nieprawidłową odpowiedź z serwera');
          }
          return response.json();
        })
        .then(data => {
          console.log(data);
        })
        .catch(error => {
          console.error('Błąd podczas wykonywania zapytania: ', error);
        });
    
  

Przykład zapytania POST przy użyciu Fetch:

JavaScript
    
      fetch('https://jsonplaceholder.typicode.com/posts', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          title: 'foo',
          body: 'bar',
          userId: 1
        })
      })
        .then(response => response.json())
        .then(data => {
          console.log(data);
        })
        .catch(error => {
          console.error('Błąd podczas wykonywania zapytania: ', error);
        });
    
  

Ustawienia Fetch

Fetch API pozwala skonfigurować różne opcje requestu za pomocą obiektu options, takie jak metoda, nagłówki, body i inne.

JavaScript
    
      const options = {
        method: 'GET', // lub 'POST', 'PUT', 'DELETE' itd.
        headers: {
          'Content-Type': 'application/json'
        },
        // body: JSON.stringify(data) // używane dla zapytań POST i PUT
      };

      fetch('https://jsonplaceholder.typicode.com/posts/1', options)
        .then(response => response.json())
        .then(data => console.log(data))
        .catch(error => console.error('Błąd podczas wykonywania zapytania: ', error));
    
  

5.2 Biblioteka Axios

Axios — to popularna biblioteka do wykonywania requestów HTTP w JavaScript. Oferuje wygodniejsze i bardziej funkcjonalne API w porównaniu do natywnego Fetch API, a także obsługuje wiele dodatkowych możliwości, takich jak automatyczna konwersja JSON, obsługa timeoutów, przerywanie requestów i wsparcie dla starszych przeglądarek.

Instalacja Axios

Axiosa można zainstalować przez npm albo podłączyć przez CDN.

Instalacja przez npm:

Terminal
    
      npm install axios
    
  

Podłączenie w Node.js lub przy użyciu modułowych bundlerów (np. Webpack):

JavaScript
    
      // Dla CommonJS
      const axios = require('axios');

      // Dla modułów ES6
      import axios from 'axios';
    
  

Podłączenie przez CDN w przeglądarce:

HTML
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  

Prosty przykład zapytania GET:

    
      let promise = axios.get(url)
    
  

Prosty przykład zapytania POST:

    
      let promise = axios.post(url, data, config)
    
  

Główne koncepcje Axiosa:

  • axios(config): główna metoda do wykonywania requestów HTTP
  • Przyjmuje obiekt konfiguracji, który może zawierać url, method, headers, data i inne parametry.
  • Shortcut methods: Axios oferuje metody dla każdego rodzaju requestu HTTP (axios.get, axios.post, axios.put, axios.delete itd.), co upraszcza wykonanie odpowiednich requestów.
  • Promise: wszystkie metody Axiosa zwracają Promise, który rozwiązuje się do obiektu odpowiedzi lub odrzuca w przypadku błędu.

Przykład prostego zapytania GET z obsługą odpowiedzi i błędów:

JavaScript
    
      axios.get(url)
        .then(response => {
          // Obsługa pozytywnej odpowiedzi
        })
        .catch(error => {
          // Obsługa błędu
        });
    
  

Przykład prostego zapytania POST z obsługą odpowiedzi i błędów:

JavaScript
    
      axios.post(url, data, config)
        .then(response => {
          // Obsługa pozytywnej odpowiedzi
        })
        .catch(error => {
          // Obsługa błędu
        });
    
  

Przykład prostego zapytania GET przy użyciu Axios:

HTML
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  
JavaScript
    
      axios.get('https://jsonplaceholder.typicode.com/posts/1')
        .then(response => {
          console.log(response.data);
        })
        .catch(error => {
          console.error('Błąd podczas wykonywania zapytania: ', error);
        });
    
  

Przykład zapytania POST przy użyciu Axios:

HTML
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  
JavaScript
    
      axios.post('https://jsonplaceholder.typicode.com/posts', {
          title: 'foo',
          body: 'bar',
          userId: 1
        })
        .then(response => {
          console.log(response.data);
        })
        .catch(error => {
          console.error('Błąd podczas wykonywania zapytania: ', error);
        });
    
  

5.3 Konfiguracja Axios

Ustawienia Axiosa

Axios pozwala konfigurować requesty HTTP za pomocą obiektu config, który zawiera takie parametry, jak url, method, headers i dane (data). Poniżej przykład podstawowej konfiguracji:

HTML
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  
JavaScript
    
      const config = {
        method: 'get', // może być 'get', 'post', 'put', 'delete' itd.
        url: 'https://jsonplaceholder.typicode.com/posts/1',
        headers: {
          'Content-Type': 'application/json' // Nagłówek wskazujący typ danych
        },
      };

      axios(config)
        .then(response => console.log(response.data))
        .catch(error => console.error('Błąd podczas wykonywania zapytania: ', error));
    
  

Dodatkowe możliwości Axiosa:

  1. Parametry zapytania: można dodawać parametry zapytania w URL.
  2. Przerywanie zapytań: przy użyciu AbortController.
  3. Timeouty: konfiguracja czasu oczekiwania na odpowiedź.

Przykład użycia parametrów zapytania:

HTML
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  
JavaScript
    
      axios.get('https://jsonplaceholder.typicode.com/posts', {
        params: {
          userId: 1 // Parametry zapytania są przekazywane przez obiekt params
        }
      })
        .then(response => {
          console.log(response.data);
        })
        .catch(error => {
          console.error('Błąd podczas wykonywania zapytania: ', error);
        });
    
  

5.4 Porównanie Fetch i Axios

Teraz porównamy Fetch i Axios pod kluczowymi aspektami:

1. Prostota użycia:

  • Fetch: prosty w użyciu dla podstawowych operacji, ale wymaga dodatkowego kodu dla bardziej złożonych scenariuszy (np. konwersja JSON, obsługa timeoutów).
  • Axios: oferuje wygodniejsze i potężniejsze API dla bardziej złożonych zapytań.

2. Wsparcie JSON:

  • Fetch: trzeba jawnie wywołać response.json(), aby przekonwertować body odpowiedzi na JSON.
  • Axios: automatycznie konwertuje odpowiedzi JSON.

3. Timeouty:

  • Fetch: brak wbudowanego wsparcia dla timeoutów. Aby je zaimplementować, trzeba użyć AbortController lub dodatkowej logiki.
  • Axios: pozwala skonfigurować timeouty za pomocą konfiguracji.

4. Interceptory:

  • Fetch: brak wsparcia dla interceptorów requestów i odpowiedzi.
  • Axios: obsługuje intereptory do wykonywania logiki przed i po zapytaniu.

Przykład z interceptorami w Axios

Interceptory pozwalają wykonać określone akcje przed wysłaniem requestu lub po otrzymaniu odpowiedzi:

HTML
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  
JavaScript
    
      // Dodanie interceptora dla requestów
      axios.interceptors.request.use(config => {
        console.log('Zapytanie wysłane do serwera: ', new Date());
        return config;
      }, error => {
        return Promise.reject(error);
      });

      // Dodanie interceptora dla odpowiedzi
      axios.interceptors.response.use(response => {
        console.log('Odpowiedź odebrana z serwera: ', new Date());
        return response;
      }, error => {
        return Promise.reject(error);
      });

      // Przykład zapytania z interceptorami
      axios.get('https://jsonplaceholder.typicode.com/todos/1')
        .then(response => console.log(response.data))
        .catch(error => console.error('Błąd podczas wykonywania zapytania: ', error));
    
  

Równoległe zapytania przy użyciu Axios

Dzięki Axios można w łatwy sposób wykonywać równoległe zapytania i obsługiwać wyniki za pomocą Promise.all():

HTML
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  
JavaScript
    
      Promise.all([
        axios.get('https://jsonplaceholder.typicode.com/todos/1'),
        axios.get('https://jsonplaceholder.typicode.com/todos/2')
      ])
      .then(responses => {
        responses.forEach(response => {
          console.log(response.data);
        });
      })
      .catch(error => console.error('Błąd podczas wykonywania zapytania: ', error));
    
  
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION