PHP-də REST API

Ümumi rahatlıq üçün həm API developerləri, həm də onun istifadəçiləri üçün API-ni standartlaşdıran xüsusi yanaşmalar mövcuddur.

Belə yanaşmalardan biri də REST API-dir. Onun əsasında CRUD əməliyyatları üçün müxtəlif HTTP protokol metodlarından istifadə etmək lazım olduğu fikri durur.

Məlumat əldə etmək üçün - GET metodu, məlumat yaratmaq üçün - POST metodu, məlumatı dəyişmək üçün - PUT metodu, məlumatı silmək üçün - DELETE metodu.

Nümunə olaraq, istifadəçilərlə işləyən müəyyən bir API-ni nəzərdən keçirək. Müxtəlif əməliyyatlar üçün URL-lərin necə görünəcəyinə baxaq.

Bütün istifadəçiləri əldə edirik:

urlGET http://api.loc/users/

Bir istifadəçini onun id ilə əldə edirik:

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

Istifadəçi yaradırıq:

urlPOST http://api.loc/user/

Istifadəçini onun id ilə dəyişirik:

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

Istifadəçini onun id ilə silirik:

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

Gəlin, REST API-nin PHP-də necə realizə olunduğuna baxaq. Burada müəyyən bir problem var. Məsələ ondadır ki, həm PHP, həm də CURL yalnız GET və POST metodlarını dəstəkləyir:

api.loc/index.php<?php
  $method = $_SERVER['REQUEST_METHOD'];
  var_dump($method); // yalnız GET və POST
?>

Ona görə də REST API-ni həyata keçirmək üçün hiylə işlətmək lazımdır. Onun mahiyyəti ondadır ki, reallıqda məlumatlar yalnız GET və POST metodları ilə ötürüləcək, amma biz digər metodların işini xüsusi HTTP başlığı vasitəsilə taklid edəcəyik. Onu, məsələn, HTTP-X-HTTP-METHOD adlandıraq.

O zaman biz bu başlığın məzmununu aşağıdakı kimi əldə edə biləcəyik:

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

İndi biz API-nin realizasiyasını yaza bilərik:

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

Internet mağazasının məhsul REST API-ni realizə edin.

Задание 2

Həyata keçirilmiş API-nin işini CURL kitabxanası vasitəsilə yoxlayın.