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:
GET http://api.loc/users/
Foydalanuvchini uning id bo‘yicha olamiz:
GET http://api.loc/user/1/
Foydalanuvchi yaratamiz:
POST http://api.loc/user/
Foydalanuvchini uning id bo‘yicha o‘zgartiramiz:
PUT http://api.loc/user/1/
Foydalanuvchini uning id bo‘yicha o‘chiramiz:
DELETE 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:
<?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:
<?php
$method = $_SERVER['HTTP-X-HTTP-METHOD'];
?>
Endi biz API ni amalga oshirishini yozishimiz mumkin:
<?php
$method = $_SERVER['HTTP-X-HTTP-METHOD'];
switch ($method) {
case 'GET':
// ...
break;
case 'POST':
// ...
break;
case 'PUT':
// ...
break;
case 'DELETE':
// ...
break;
}
?>
Internet magazining tovarlari uchun REST API ni amalga oshiring.
Amalga oshirilgan API ning ishlashini CURL kutubxonasi yordamida tekshiring.