REST API у PHP-у

Постоје посебни приступи који стандардизују API ради опште погодности како програмера који развијају API, тако и његових корисника.

Један од таквих приступа је REST API. Његова основа је идеја да за CRUD операције треба користити различите методе HTTP протокола.

За добијање података - метод GET, за креирање података - метод POST, за измену података - метод PUT, за брисање података - метод DELETE.

За пример, хајде да размотримо неки API који манипулише корисницима. Хајде да погледамо како ће URL изгледати за различите радње.

Добијамо све кориснике:

urlGET http://api.loc/users/

Добијамо једног корисника по његовом id:

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

Креирамо корисника:

urlPOST http://api.loc/user/

Мењамо корисника по његовом id:

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

Бришемо корисника по његовом id:

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

Хајде да погледамо како се REST API имплементира у PHP-у. Овде постоји одређени проблем. Ствар је у томе што и PHP, и CURL подржавају само методе GET и POST:

api.loc/index.php<?php
  $method = $_SERVER['REQUEST_METHOD'];
  var_dump($method); // само GET и POST
?>

Због тога, за имплементацију REST API-ја мораћемо да прибегнемо лукавству. Његова суштина је у томе, да ће у стварности подаци бити прослеђивани само методама GET и POST, али ми ћемо имитирати рад других метода помоћу прилагођеног HTTP заглавља. Назовимо га, на пример, HTTP-X-HTTP-METHOD.

Тада ћемо моћи да добијемо садржај тог заглавља на следећи начин:

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

Сада можемо да напишемо имплементацију 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

Имплементирајте REST API за производе интернет продавнице.

Задание 2

Проверите рад имплементираног API-ја користећи CURL библиотеку.