Kursy i Poradniki IT - Adrian Kowalski
Kurs Programowania PHP dla Początkujących
O lekcji

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

  1. Zasoby: W REST API wszystko traktuje się jako zasób (np. użytkownicy, artykuły), który jest identyfikowany przez unikalny URL.
  2. 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.
  • 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.

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.