REST API w PHP

Istnieją specjalne podejścia, standaryzujące API dla wspólnej wygody zarówno deweloperów API, jak i jego użytkowników.

Jednym z takich podejść jest REST API. Jego podstawą jest idea, że dla operacji CRUD należy używać różnych metod protokołu HTTP.

Dla pobierania danych - metoda GET, dla tworzenia danych - metoda POST, dla zmiany danych - metoda PUT, dla usuwania danych - metoda DELETE.

Dla przykładu rozważmy pewne API, manipulujące użytkownikami. Spójrzmy, jak będą wyglądać URL dla różnych akcji.

Pobieramy wszystkich użytkowników:

urlGET http://api.loc/users/

Pobieramy jednego użytkownika po jego id:

urlGET http://api.loc/user/1/

Tworzymy użytkownika:

urlPOST http://api.loc/user/

Zmieniamy użytkownika po jego id:

urlPUT http://api.loc/user/1/

Usuwamy użytkownika po jego id:

urlDELETE http://api.loc/user/1/

Spójrzmy, jak REST API jest implementowane w PHP. Jest tu pewien problem. Chodzi o to, że zarówno PHP, jak i CURL obsługują tylko metody GET i POST:

api.loc/index.php<?php
  $method = $_SERVER['REQUEST_METHOD'];
  var_dump($method); // tylko GET i POST
?>

Dlatego do implementacji REST API trzeba będzie pójść na sztuczkę. Jej istota polega na tym, że w rzeczywistości dane będą przesyłane tylko metodami GET i POST, ale my będziemy symulować działanie innych metod za pomocą niestandardowego nagłówka HTTP. Nazwijmy go, na przykład, HTTP-X-HTTP-METHOD.

Wtedy będziemy mogli pobrać zawartość tego nagłówka w następujący sposób:

api.loc/index.php<?php
  $method = $_SERVER['HTTP-X-HTTP-METHOD'];
?>

Teraz możemy napisać implementację API:

api.loc/index.php<?php
  $method = $_SERVER['HTTP-X-HTTP-METHOD'];
  
  switch ($method)  {
    case 'GET':
      // ...
    break;
    case 'POST':
      // ...
    break;
    case 'PUT':
      // ...
    break;
    case 'DELETE':
      // ...
    break;
  }
?>
Задание 1

Zaimplementuj REST API produktów sklepu internetowego.

Задание 2

Sprawdź działanie zaimplementowanego API za pomocą biblioteki CURL.