Przejdź do głównej zawartości

Integracja z zewnetrznymi API

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.

Zestaw reguł i protokołów okreslajacych jak aplikacje komunikuja się że soba.

Konkretny adres URL, pod którym dostepna jest funkcjonalnosc API:

https://api.weather.com/v1/current?city=Warsaw
└──────────────┬──────────┘└─┬─┘└───┬───┘└────┬────┘
bazowy URL wersja zasob parametry

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

Najpopularniejszy format wymiany danych:

{
"id": 1,
"name": "Jan Kowalski",
"email": "jan@example.com",
"active": true,
"roles": ["user", "admin"]
}
┌─────────────────┐ ┌─────────────────┐
│ TWOJA APLIKACJA │ │ ZEWNETRZNE API │
│ (klient) │ │ (serwer) │
└────────┬────────┘ └────────┬────────┘
│ │
│ 1. REQUEST (GET /api/users) │
│ ─────────────────────────────────► │
│ Headers: Authorization: Bearer..│
│ │
│ 2. RESPONSE (200 OK) │
│ ◄───────────────────────────────── │
│ Body: {"users": [...]} │
│ │
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);
}
}
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życie
utworzUzytkownika({
name: 'Anna Nowak',
email: 'anna@example.com'
});
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}`);
}
}
<?php
function 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);
<?php
function 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);
}
  • 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
// Ź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'];
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życie
const pogoda = await pobierzPogode('Warszawa');
console.log(`Temperatura: ${pogoda.temperatura}°C`);
console.log(`Opis: ${pogoda.opis}`);
  • 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