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-ის საკუთარი (custom) ჰედერის მეშვეობით. მოდით, დავარქვათ მას, მაგალითად, 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 ბიბლიოთეკის მეშვეობით.