در این آموزش از سری مقالات ساخت وب سرویس RESTful در php , قصد داریم به شما نحوه پیاده سازی جستجو REST API در PHP را نشان بدیم . من یک وب سرویس RESTful در php برای انجام عملیات جستجو (Search) در دیتابیس بر اساس کلمه ای که در querystring
پاس داده شده ساختم که در ادامه نحوه کار آن و کد php استفاده شده را خواهیم دید . همچنین در آموزش قبلی نحوه ساخت وب سرویس RESTful در php را به شما نشان دادیم .
در این مثال از پیاده سازی جستجو REST API در PHP , از دیتابیسی که شامل یک جدول از نام موبایل ها است استفاده میکنیم. همچنین از کلاس RESTHandler
برای فراخوانی DAO برا انجام عملیات جستجو در دیتابیس , بهره می بریم . بعد از دریافت نتایج (fetch) , API رست فول ما پاسخ را در فرمت داده json برگشت می دهد..
پیاده سازی جستجو REST API در دیتابیسMySQL
این کد به شما یک کلاس مدیریت سرویس REST را نشان میدهد . این فراخوانی DAO به شما نحوه اجرای یک کویری جستجو بر اساس کلمه کلیدی پاس داده شده توسط متد GET را نشان میدهد . DAO
یک آرایه ای از نتایح را به هندلر REST برگشت (return
) می دهد. هندلر REST آرایه پاسخ را بر اساس آرایه نام موبایل ها که بر اساس کلمه جستجو شده, یافت شده اند را می سازد .
آرایه پاسخ (Response) بر اساس Content-Type
درخواستی , اینکد میکند . در این مثال از پیاده سازی جستجو REST API در PHP از فرمت داده jSON
استفاده میکنیم.
کد php زیر به شما هندلر REST و فایل DAO موبایل را برای انجام جستجو در دیتابیس نشان می دهد. تابع searchMobile() برای ساخت کویری جستجو در دیتابیس استفاده شده است . بعد از اجرای کویری SQL , این تابع سطر های یافت شده از دیتابیس را به هندلر REST برای ساخت پاسخ در فرمت داده ای json توسط تابع json_encode()
برگشت می دهد .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php require_once("SimpleRest.php"); require_once("Mobile.php"); class MobileRestHandler extends SimpleRest { function searchMobile() { $mobile = new Mobile(); $rawData = $mobile->searchMobile(); if(empty($rawData)) { $statusCode = 404; $rawData = array('error' => 'No mobiles found!'); } else { $statusCode = 200; } $requestContentType = 'application/json'; $this ->setHttpHeaders($requestContentType, $statusCode); $result["output"] = $rawData; if(strpos($requestContentType,'application/json') !== false){ $response = $this->encodeJson($result); echo $response; } } public function encodeJson($responseData) { $jsonResponse = json_encode($responseData); return $jsonResponse; } } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php require_once("dbcontroller.php"); /* A domain Class to demonstrate RESTful web services */ Class Mobile { private $mobiles = array(); /* you should hookup the DAO here */ public function searchMobile(){ if(isset($_GET['name'])){ $name = $_GET['name']; $query = "SELECT * FROM tbl_mobile WHERE name LIKE '%" .$name. "%'"; } else { $query = "SELECT * FROM tbl_mobile"; } $dbcontroller = new DBController(); $this->mobiles = $dbcontroller->executeSelectQuery($query); return $this->mobiles; } } ?> |
خروجی جستجو REST API در PHP
کد وضعیت ۴۰۴,۲۰۴,۲۰۰
در زمان کار با REST API , باید کد های وضعیت مهم در پاسخ (response) ارایه بدید . اگر API ما بصورت عمومی قابل دسترس باشد , ما مطمین نیستم که دقیقا چه نوع اپلیکیشن هایی قرار است از API ما استفاده کنند . ممکن است که یک اپلیکیشن اندروید یا حتی وب سرویس های دیگر از آن بهره ببرند . کدهای پاسخ ما باید قانع کننده و مناسب بر اساس وضعیت درخواست و عملیاتی که انجام می شود , باشد .
در مثال پیاده سازی جستجو REST API , این سوال مطرح است که هنگامی که هیچ نوع داده ای برای کویری اجرا شده یافت نشد , چه نوع کد وضعیتی باید برگشت داده شود .
من از REST در فرمت URL
بصورت زیر استفاده می کنم.
1 |
/restapi/mobile/list?name=value |
این URL دقیقا مطابق استاندارد و اصول وب سرویس REST است .
زمانی که url توسط سرور اجرا می شود , جستجویی بر اساس مقدار پاس داده شده در دیتابیس انجام و در نهایت نتیجه ای یافت نمی شود.. در این وضعیت باید یک پاسخ با وضعیت HTTP 404
ارسال کنیم ؟ در این حالت ترجیح میدهم که یک کد وضعیت ۲۰۰ (صحیح) و پاسخ خالی (null
) را برگشت بدم . منبع REST پیدا شد ولی هیچ داده ای مطابق درخواست من برگشت داده نشد و این منطق درست تر است .
زمانی منطقی است که کد وضعیت ۴۰۴ NotFound را ارسال کنیم که مثلا سرور در دسترس نیست , دیتابیس قادر به اجرای کویری SQL نیست و یا زمانی که URL اشتباه است . خب امیدوارم متوجه شده باشید که زمانی که URL صحیح است و سرور نیز پاسخگو است , ما پاسخ موفقیت آمیز را برگشت می دهیم ولی بر اساس شرایط کویری هیچ نوع داده ای برای ارسال ندارید , بهتر است که یک پاسخ خالی را برگشت دهید .
امیدوارم از آموزش پیاده سازی جستجو REST API در PHP لذت برده باشید . برای دانلود سورس کد کامل به بخش دانلود باکس این مطلب مراجعه کنید.
هر سوالی داشتید ، از قسمت نظرات اقدام کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید.