در این مطب برنامه نویسی REST API را به شکلی بسیار ساده و قابل فهم آموزش داده شده است، برای آشنایی مفهومی و اصولی با وب سرویس های REST API توصیه می کنیم ، این مطلب را بخوانید.

REST (Representation State Transfer) راهی برای دسترسی به خدمات وب است. REST به عنوان یک سبک معماری نیازی به پردازش ندارد و ساده تر و انعطاف پذیر تر از SOAP (Simple Object Access Protocol) است که یکی دیگر از پروتکل های دسترسی به سرویس های وب مبتنی بر استانداردهای توسعه یافته توسط مایکروسافت است. REST بسیار ساده تر و به طور گسترده تری نسبت به SOAP استفاده می شود (حدود ۷۰٪ از API سرویس وب با استفاده از REST API پیاده سازی شده است) REST API تازه ابداع شده و به دنبال حل همه مشکلات در SOAP است. در این آموزش، ساده ترین روش برای ایجاد API REST خود در PHP را به شما نشان می دهم.

قبل از اینکه جزئیات پیاده سازی را شروع کنیم باید درک کنیم که REST چیست؟

REST API استخراج یا ارائه برخی از اطلاعات از یک سرویس وب استفاده می کنیم. بصورت دادن فرستادن درخواست های HTTP ساده شامل GET، POST ، PUT یا DELETE از مشتری (برنامه موبایل، یک وب سایت و غیره) به سرور برای دریافت اطلاعات از سرور یا هم ارسال اطلاعات به سرور.

سرویس های وب مبتنی بر REST می توانند خروجی را در هر فرمت مانند CSV، JSON و RSS تولید کنند. نکته مهم این است که می توانید خروجی مورد نیاز خود را با فرمتی بدست آورید که در زبان برنامه نویسی درخواست کننده آسان تر باشد. نمودار نمونه REST API در زیر آمده است.

rest api

JSON رایجترین فرمت خروجی API REST است و ما قصد داریم یک API REST ایجاد کنیم که درخواست GET را پذیرفته و خروجی JSON را ارائه کند.

در این آموزش، یک API REST ایجاد خواهیم کرد که قیمت محصول خاصی را با یک URL درخواست می کند. نام محصول به عنوان پارامتر انتقال داده می شود و قیمت آن محصول را در قالب JSON دریافت می کنیم.

آموزش شامل ۲ بخش است. بخش اول به ایجاد API REST در PHP و بخش دوم به استفاده از API REST در PHP می پردازد.

بخش اول – ایجاد REST API در PHP

کد کامل برای ساخت REST API، داخل فایل api.php در زیر آمده است.

<?php
header("Content-Type:application/json");
require "data.php";
if(!empty($_GET['name']))
{
$name=$_GET['name'];
$price = get_price($name);
if(empty($price))
{
response(200,"Product Not Found",NULL);
}
else
{
response(200,"Product Found",$price);
}
}
else
{
response(400,"Invalid Request",NULL);
}
function response($status,$status_message,$data)
{
header("HTTP/1.1 ".$status);
$response['status']=$status;
$response['status_message']=$status_message;
$response['data']=$data;
$json_response = json_encode($response);
echo $json_response;
}

فایل اسکریپت فوق مسئول پاسخگویی به درخواست HTTP GET و ارائه خروجی JSON به کاربر است.

باید نوع محتویات این فایل را به عنوان JSON تعیین کنیم زیرا برای خروجی برنامه با فرمت استاندارد  JSON خواهد بود (فرمت توصیه شده در REST API همین JSON است). API از فایل data.php برای به دست آوردن قیمت محصول خاص استفاده کرده است.

کد کامل فایل data.php در زیر آمده است:

<?php
function get_price($name)
{
$products = [
"book"=>20,
"pen"=>10,
"pencil"=>5
];
foreach($products as $product=>$price)
{
if($product==$name)
{
return $price;
break;
}
}
}

برای آموزش راحت تر، من به جای پایگاه داده از یک آرایه استفاده می کنم. در حالی که برای ایجاد API در دنیای واقعی نیاز به جمع آوری داده ها از پایگاه داده خواهید داشت. اگر به برنامه نویسی بانک اطلاعاتی با پی اچ پی تسلط دارید، براحتی می توانید یک API واقعی در ارتباط با بانک اطلاعاتی بنویسید.

حالا می توانید اطلاعات مربوط به محصول را با استفاده از URL زیر دریافت کنید:

http://localhost/projectname/api.php?name=pen

همانطور که می بینید، آدرس بالا استاندارد نشده است. برای استفاده از درخواست های استاندارد شده، می توانیم با استفاده از یک فایل .htaccess شامل قواعد ساده ، امکان استفاده از URL های استاندارد برای درخواست سرویس وب فراهم کنیم.

کد کاملی برای فایل .htaccess در زیر آمده است.

RewriteEngine On # Turn on the rewriting engine
RewriteRule ^api/([0-9a-zA-Z_-]*)$ api.php?name=$1 [NC,L]

پرچم[L] باعث می شود تا mod_rewrite پردازش مجموعه قوانین را متوقف کند. در بیشتر موارد، این بدان معنی است که اگر قاعده مطابقت داشته باشد، قوانین بعدی پردازش نخواهد شد. استفاده از پرچم [NC] باعث می شود RewriteRule در یک حالت غیر حساس به حالت حروف اجرا شود. یعنی اینکه که حروف کوچک و بزرگ در URL ، یکسان درنظرگرفته شوند.

حالا می توانید با مراجعه به URL زیر به اطلاعات مربوط به محصول دسترسی داشته باشید:

http://localhost/projectname/api/pen

بخش دوم- استفاده از REST API در PHP

حالا که وب سرویس REST API را در سمت سرور ساختیم، می توانیم جزئیات قیمت در وب سایت PHP خود را با فراخوانی REST API به عنوان درخواست HTTP GET از طریق CURL به صورت زیر ارائه دهیم:

<?php
if(isset($_POST['submit']))
{
$name = $_POST['name'];
$url = "http://localhost/projectname/api/".$name;
$client = curl_init($url);
curl_setopt($client,CURLOPT_RETURNTRANSFER,true);
$response = curl_exec($client);
$result = json_decode($response);
echo $result->data;
}
?>

به خاطر داشته باشید که CURLOPT_RETURNTRANSFER را باید بصورت درست تنظیم کنید. چون نیاز داریم خروجی CURL را در متغیر قرار دهیم و به طور معمول CURL اجازه نخواهد داد خروجی آن در یک متغیر ذخیره شود. پس از رمزگشایی JSON ، قیمت محصول را بدست خواهیم آورد .

در زیر فرم HTML را می بینید که نام کالا را از کاربر دریافت می کند:

<!DOCTYPE html>
<html lang="en">
<head>
<title>Rest API Client Side Demo</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h2>Rest API Client Side Demo</h2>
<form class="form-inline" action="" method="POST">
<div class="form-group">
<label for="name">Name</label>
<input type="text" name="name" class="form-control" placeholder="Enter Product Name" required/>
</div>
<button type="submit" name="submit" class="btn btn-default">Submit</button>
</form>
<p>&nbsp;</p>
<h3>
<?php
// Refer above PHP code
?>
</h3>
</div>
</body>
</html>

 

نمایش قابل چاپ