REST API v PHP

Existují speciální přístupy, které standardizují API pro společné pohodlí jak vývojářů API, tak jeho uživatelů.

Jedním z takových přístupů je REST API. Jeho základem je myšlenka, že pro CRUD operace je nutné používat různé metody protokolu HTTP.

Pro získání dat - metoda GET, pro vytvoření dat - metoda POST, pro změnu dat - metoda PUT, pro smazání dat - metoda DELETE.

Jako příklad uvažujme nějaké API, které manipuluje s uživateli. Podívejme se, jak budou URL pro různé akce vypadat.

Získáme všechny uživatele:

urlGET http://api.loc/users/

Získáme jednoho uživatele podle jeho id:

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

Vytvoříme uživatele:

urlPOST http://api.loc/user/

Změníme uživatele podle jeho id:

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

Smažeme uživatele podle jeho id:

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

Podívejme se, jak se REST API implementuje v PHP. Je zde určitý problém. Faktem je, že jak PHP, tak CURL podporují pouze metody GET a POST:

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

Proto pro implementaci REST API budeme muset použít trik. Podstata spočívá v tom, že ve skutečnosti budou data přenášena pouze metodami GET a POST, ale my budeme napodobovat práci jiných metod pomocí vlastní HTTP hlavičky. Pojmenujeme ji například HTTP-X-HTTP-METHOD.

Pak budeme moci získat obsah této hlavičky následujícím způsobem:

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

Nyní můžeme napsat implementaci 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

Implementujte REST API pro produkty internetového obchodu.

Задание 2

Otestujte funkčnost implementovaného API pomocí knihovny CURL.