PHP da REST API

API ni ham API ishlab chiquvchilari, ham uning foydalanuvchilari uchun umumiy qulaylikni standartlashtiruvchi maxsus yondashuvlar mavjud.

Bunday yondashuvlardan biri REST API hisoblanadi. Uning asosida CRUD operatsiyalari uchun HTTP protokolining turlari metodlaridan foydalanish zarurati g‘oyasi yotadi.

Ma'lumotlarni olish uchun - GET metodi, ma'lumot yaratish uchun - POST metodi, ma'lumotlarni o'zgartirish uchun - PUT metodi, ma'lumotlarni o'chirish uchun - DELETE metodi.

Misol sifatida foydalanuvchilar bilan ishlovchi ma'lum bir API ni ko'rib chiqaylik. Keling, turli harakatlar uchun URL qanday ko'rinishini ko'ramiz.

Barcha foydalanuvchilarni olamiz:

urlGET http://api.loc/users/

Foydalanuvchini uning id bo‘yicha olamiz:

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

Foydalanuvchi yaratamiz:

urlPOST http://api.loc/user/

Foydalanuvchini uning id bo‘yicha o‘zgartiramiz:

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

Foydalanuvchini uning id bo‘yicha o‘chiramiz:

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

Keling, REST API PHP da qanday amalga oshirilishini ko'ramiz. Bu erda ma'lum bir muammo bor. Gap shundaki, ham PHP, ham CURL faqat GET va POST metodlarini qo‘llab-quvvatlaydi:

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

Shuning uchun REST API ni amalga oshirish uchun hiyla ishlatishga to'g'ri keladi. Uning mazmuni shundan iboratki, aslida ma'lumotlar faqat GET va POST metodlari bilan uzatiladi, lekin biz boshqa metodlarning ishlashini maxsus HTTP sarlavhasi yordamida taqlid qilamiz. Uni, masalan, HTTP-X-HTTP-METHOD deb nomlaymiz.

Keyin biz ushbu sarlavha mazmunini quyidagicha olishimiz mumkin bo‘ladi:

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

Endi biz API ni amalga oshirishini yozishimiz mumkin:

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 magazining tovarlari uchun REST API ni amalga oshiring.

Задание 2

Amalga oshirilgan API ning ishlashini CURL kutubxonasi yordamida tekshiring.