REST API v PHP

Existujú špeciálne prístupy, ktoré štandardizujú API pre všeobecné pohodlie ako pre vývojárov API, tak pre jeho používateľov.

Jedným z takýchto prístupov je REST API. Jeho základom je myšlienka, že pre CRUD operácie je potrebné používať rôzne metódy protokolu HTTP.

Pre získanie údajov - metóda GET, pre vytvorenie údajov - metóda POST, pre zmenu údajov - metóda PUT, pre vymazanie údajov - metóda DELETE.

Pre príklad si pozrime nejaké API, ktoré manipuluje s používateľmi. Pozrime sa, ako budú vyzerať URL pre rôzne akcie.

Získame všetkých používateľov:

urlGET http://api.loc/users/

Získame jedného používateľa podľa jeho id:

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

Vytvoríme používateľa:

urlPOST http://api.loc/user/

Zmeníme používateľa podľa jeho id:

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

Vymažeme používateľa podľa jeho id:

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

Pozrime sa, ako sa REST API implementuje v PHP. Je tu istý problém. Vec sa má tak, že aj PHP, aj CURL podporujú iba metódy GET a POST:

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

Preto na implementáciu REST API budeme musieť pristúpiť k triku. Jeho podstata spočíva v tom, že v skutočnosti sa údaje budú prenášať len metódami GET a POST, ale my budeme imitovať prácu iných metód pomocou vlastnej HTTP hlavičky. Pomenujeme ju, napríklad, HTTP-X-HTTP-METHOD.

Potom budeme môcť získať obsah tejto hlavičky nasledovným spôsobom:

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

Teraz môžeme napísať implementáciu 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 pre tovar internetového obchodu.

Задание 2

Otestujte činnosť implementovaného API pomocou knižnice CURL.