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 да қандай амалга оширилишини кўриб чиқайлик. Бу ерда бир муаммо бор. Гap яна 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 кутубхонаси ёрдамида текшириб кўринг.