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.