Integracja z zewnetrznymi API
Wprowadzenie
Dział zatytułowany „Wprowadzenie”API (Application Programming Interface) to interfejs umozliwiajacy komunikacje miedzy roznymi systemami. W kontekscie aplikacji webowych, API pozwala na pobieranie i wysyłanie danych do zewnętrznych serwisow - pogoda, płatności, mapy, media społecznościowe.
Integracja z API to fundamentalna umiejetnosc współczesnego programisty. Większość aplikacji korzysta z zewnętrznych usług zamiast implementować wszystko od zera.
Kluczowe pojecia
Dział zatytułowany „Kluczowe pojecia”API (Application Programming Interface)
Dział zatytułowany „API (Application Programming Interface)”Zestaw reguł i protokołów okreslajacych jak aplikacje komunikuja się że soba.
Endpoint
Dział zatytułowany „Endpoint”Konkretny adres URL, pod którym dostepna jest funkcjonalnosc API:
https://api.weather.com/v1/current?city=Warsaw└──────────────┬──────────┘└─┬─┘└───┬───┘└────┬────┘ bazowy URL wersja zasob parametryREST (Representational State Transfer)
Dział zatytułowany „REST (Representational State Transfer)”Styl architektoniczny dla API oparty na HTTP:
- Wykorzystuje metody HTTP (GET, POST, PUT, DELETE)
- Bezstanowy - każde zadanie jest niezależne
- Zasoby identyfikowane przez URL
JSON (JavaScript Object Notation)
Dział zatytułowany „JSON (JavaScript Object Notation)”Najpopularniejszy format wymiany danych:
{ "id": 1, "name": "Jan Kowalski", "email": "jan@example.com", "active": true, "roles": ["user", "admin"]}Jak działa komunikacja z API?
Dział zatytułowany „Jak działa komunikacja z API?”┌─────────────────┐ ┌─────────────────┐│ TWOJA APLIKACJA │ │ ZEWNETRZNE API ││ (klient) │ │ (serwer) │└────────┬────────┘ └────────┬────────┘ │ │ │ 1. REQUEST (GET /api/users) │ │ ─────────────────────────────────► │ │ Headers: Authorization: Bearer..│ │ │ │ 2. RESPONSE (200 OK) │ │ ◄───────────────────────────────── │ │ Body: {"users": [...]} │ │ │Przykłady w JavaScript (Fetch API)
Dział zatytułowany „Przykłady w JavaScript (Fetch API)”Podstawowe zadanie GET
Dział zatytułowany „Podstawowe zadanie GET”async function pobierzUzytkownikow() { try { const response = await fetch('https://api.example.com/users');
// Sprawdz czy odpowiedz jest poprawna if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); }
// Parsuj JSON const users = await response.json(); console.log(users); return users;
} catch (error) { console.error('Błąd pobierania:', error); }}Zadanie POST z danymi
Dział zatytułowany „Zadanie POST z danymi”async function utworzUzytkownika(dane) { const response = await fetch('https://api.example.com/users', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer token123' }, body: JSON.stringify(dane) });
const nowyUser = await response.json(); return nowyUser;}
// UżycieutworzUzytkownika({ name: 'Anna Nowak', email: 'anna@example.com'});Obsługa różnych kodow statusu
Dział zatytułowany „Obsługa różnych kodow statusu”async function obsluzOdpowiedz(response) { switch (response.status) { case 200: case 201: return await response.json(); case 400: throw new Error('Nieprawidłowe dane'); case 401: throw new Error('Brak autoryzacji'); case 404: throw new Error('Zasob nie istnieje'); case 500: throw new Error('Błąd serwera'); default: throw new Error(`Nieznany błąd: ${response.status}`); }}Przykłady w PHP (cURL)
Dział zatytułowany „Przykłady w PHP (cURL)”Podstawowe zadanie GET
Dział zatytułowany „Podstawowe zadanie GET”<?phpfunction pobierzDaneZApi($url) { $ch = curl_init();
curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30, CURLOPT_HTTPHEADER => [ 'Accept: application/json' ] ]);
$response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch)) { throw new Exception('Błąd cURL: ' . curl_error($ch)); }
curl_close($ch);
if ($httpCode !== 200) { throw new Exception("Błąd HTTP: $httpCode"); }
return json_decode($response, true);}
// Użycie$users = pobierzDaneZApi('https://api.example.com/users');print_r($users);Zadanie POST w PHP
Dział zatytułowany „Zadanie POST w PHP”<?phpfunction wyslijDane($url, $dane) { $ch = curl_init();
curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($dane), CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'Authorization: Bearer ' . API_KEY ] ]);
$response = curl_exec($ch); curl_close($ch);
return json_decode($response, true);}Klucze API i bezpieczeństwo
Dział zatytułowany „Klucze API i bezpieczeństwo”Po co klucz API?
Dział zatytułowany „Po co klucz API?”- Identyfikacja - serwer wie kto wysyła zadanie
- Limity - ograniczenie liczby żądań (rate limiting)
- Płatności - rozliczanie za użycie API
- Bezpieczeństwo - blokowanie nieautoryzowanego dostepu
Gdzie przechowywac klucz API?
Dział zatytułowany „Gdzie przechowywac klucz API?”// Źle - klucz w kodzie$apiKey = 'sk_live_abc123secret';
// Dobrze - klucz w zmiennej srodowiskowej$apiKey = getenv('API_KEY');
// Lub plik .env (dodany do .gitignore)$apiKey = $_ENV['API_KEY'];Praktyczny przykład: API pogodowe
Dział zatytułowany „Praktyczny przykład: API pogodowe”async function pobierzPogode(miasto) { const apiKey = process.env.WEATHER_API_KEY; const url = `https://api.openweathermap.org/data/2.5/weather?q=${miasto}&appid=${apiKey}&units=metric&lang=pl`;
const response = await fetch(url); const dane = await response.json();
return { temperatura: dane.main.temp, opis: dane.weather[0].description, wilgotnosc: dane.main.humidity };}
// Użycieconst pogoda = await pobierzPogode('Warszawa');console.log(`Temperatura: ${pogoda.temperatura}°C`);console.log(`Opis: ${pogoda.opis}`);Najczestsze błędy
Dział zatytułowany „Najczestsze błędy”Podsumowanie
Dział zatytułowany „Podsumowanie”- API to interfejs do komunikacji miedzy aplikacjami
- REST API wykorzystuje metody HTTP i format JSON
- Fetch (JS) i cURL (PHP) to standardowe narzedzia do komunikacji
- Klucze API należy przechowywac w zmiennych srodowiskowych
- Zawsze obsługuj błędy i sprawdzaj kody statusu HTTP
- Respektuj limity i dokumentacje zewnętrznego API
MDN: Fetch API Dokumentacja Fetch w JavaScript
PHP: cURL Dokumentacja cURL w PHP
Public APIs Lista darmowych API do nauki
Postman Narzedzie do testowania API