REST (Representational State Transfer) to styl architektoniczny oparty na protokole HTTP, który umożliwia wymianę danych pomiędzy aplikacjami. RESTful API jest łatwe w użyciu, elastyczne i wydajne, szczególnie w aplikacjach webowych, które komunikują się z serwerem.
Podstawowe zasady RESTful API
- Zasoby: W REST API wszystko traktuje się jako zasób (np. użytkownicy, artykuły), który jest identyfikowany przez unikalny URL.
- Operacje CRUD: Operacje wykonywane na zasobach są mapowane na odpowiednie metody HTTP:
- GET: Odczyt zasobu.
- POST: Tworzenie zasobu.
- PUT: Aktualizacja zasobu.
- DELETE: Usuwanie zasobu.
1. Przykład REST API – GET (Pobieranie zasobów)
Załóżmy, że mamy prostą aplikację, która zarządza listą użytkowników. Zasób „users” będzie przechowywał dane o użytkownikach, a operacja GET pozwoli na pobranie tej listy.
Kod serwera – get_users.php
<?php
// get_users.php
// Symulujemy bazę danych (tutaj po prostu tablica)
$users = [
["id" => 1, "name" => "Jan Kowalski", "email" => "[email protected]"],
["id" => 2, "name" => "Anna Nowak", "email" => "[email protected]"],
["id" => 3, "name" => "Marek Nowak", "email" => "[email protected]"]
];
// Nagłówek informujący, że dane będą w formacie JSON
header('Content-Type: application/json');
// Sprawdzamy, czy przekazany parametr "id" wskazuje na konkretnego użytkownika
if (isset($_GET['id'])) {
$id = $_GET['id'];
$userFound = null;
// Przechodzimy po wszystkich użytkownikach, aby znaleźć tego o danym id
foreach ($users as $user) {
if ($user['id'] == $id) {
$userFound = $user;
break;
}
}
// Jeśli znaleźliśmy użytkownika, zwracamy go w formacie JSON, jeśli nie – zwracamy błąd
if ($userFound) {
echo json_encode($userFound);
} else {
echo json_encode(["error" => "User not found"]);
}
} else {
// Jeśli nie podano "id", zwracamy całą listę użytkowników
echo json_encode($users);
}
?>
Wywołanie API z użyciem cURL – GET
Teraz, aby uzyskać dane o użytkownikach, możemy wykonać żądanie GET w następujący sposób:
<?php
// client.php - wysyłanie żądania GET do API
// Zmienna przechowująca adres API
$apiUrl = "http://localhost/get_users.php";
// Wysłanie żądania GET bez parametru "id" – pobranie wszystkich użytkowników
$response = file_get_contents($apiUrl);
$users = json_decode($response, true);
echo "<pre>";
print_r($users); // Wyświetlenie wyników
echo "</pre>";
// Wysłanie żądania GET z parametrem "id" – pobranie konkretnego użytkownika
$response = file_get_contents($apiUrl . "?id=2");
$user = json_decode($response, true);
echo "<pre>";
print_r($user); // Wyświetlenie wyników
echo "</pre>";
?>
Opis działania
- get_users.php:
- Jeśli nie podamy parametru
id
, API zwróci listę wszystkich użytkowników w formacie JSON. - Jeśli podamy
id
w zapytaniu (np.?id=2
), API zwróci dane tylko jednego użytkownika o tym identyfikatorze.
- Jeśli nie podamy parametru
- client.php:
- Używamy funkcji
file_get_contents()
, aby wysłać zapytanie GET do serwera i otrzymać odpowiedź. - Odpowiedź jest dekodowana z JSON i wyświetlana na stronie.
- Używamy funkcji
2. Przykład REST API – POST (Dodawanie zasobu)
Teraz pokażemy, jak za pomocą żądania POST dodać nowego użytkownika do „bazy danych” (tutaj za pomocą tablicy). Dodawanie użytkownika wymaga wysłania danych w ciele żądania.
Kod serwera – add_user.php
<?php
// add_user.php
// Symulujemy bazę danych (tutaj po prostu tablica)
$users = [
["id" => 1, "name" => "Jan Kowalski", "email" => "[email protected]"],
["id" => 2, "name" => "Anna Nowak", "email" => "[email protected]"]
];
// Odczytanie danych przesłanych w żądaniu POST
$data = json_decode(file_get_contents("php://input"), true);
// Sprawdzenie, czy wszystkie dane zostały przesłane
if (isset($data['name']) && isset($data['email'])) {
// Generowanie nowego id
$newId = count($users) + 1;
// Dodawanie nowego użytkownika do "bazy danych"
$newUser = [
"id" => $newId,
"name" => $data['name'],
"email" => $data['email']
];
$users[] = $newUser;
// Odpowiedź po dodaniu użytkownika
header('Content-Type: application/json');
echo json_encode(["message" => "User added successfully", "user" => $newUser]);
} else {
// Błąd, jeśli dane są niepełne
header('Content-Type: application/json');
echo json_encode(["error" => "Invalid data"]);
}
?>
Wywołanie API z użyciem cURL – POST
Aby dodać nowego użytkownika, wyślemy dane w formacie JSON za pomocą cURL:
<?php
// client.php - wysyłanie żądania POST do API
// Adres API
$apiUrl = "http://localhost/add_user.php";
// Dane do wysłania (JSON)
$data = [
"name" => "Marek Nowak",
"email" => "[email protected]"
];
// Inicjalizacja cURL
$ch = curl_init($apiUrl);
// Ustawienia cURL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
// Wykonanie żądania i pobranie odpowiedzi
$response = curl_exec($ch);
curl_close($ch);
// Przetwarzanie odpowiedzi
$responseData = json_decode($response, true);
echo "<pre>";
print_r($responseData); // Wyświetlenie odpowiedzi
echo "</pre>";
?>
Opis działania
- add_user.php:
- Skrypt odbiera dane przesyłane w ciele żądania POST w formacie JSON, dekoduje je, a następnie dodaje nowego użytkownika do „bazy danych”.
- Odpowiedź jest zwracana w formacie JSON, zawierająca komunikat o powodzeniu operacji oraz dane nowego użytkownika.
- client.php:
- Skrypt wysyła dane użytkownika (imię i e-mail) do API za pomocą cURL, ustawiając nagłówek
Content-Type: application/json
. - Odpowiedź jest następnie dekodowana z JSON i wyświetlana.
- Skrypt wysyła dane użytkownika (imię i e-mail) do API za pomocą cURL, ustawiając nagłówek