سرفصل‌های آموزشی
آموزش RESTful API
تکمیل فایل index.php

تکمیل فایل index.php

پیش از این گفتیم که فایل index.php به منزلهٔ نقطهٔ‌ شروع این پروژهٔ تِستِر خواهد بود که با کدهای زیر آن را تکمیل خواهیم کرد:

<!DOCTYPE html>
<html>
    <head>
        <title>Articles List</title>
        <meta charset="utf-8">
    </head>
    <body>
        <div>
            <a href="signin">Sing in</a> | <a href="signup">Sing up</a>
        </div>
        <h1>Articles List</h1>
        <?php 
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, 'http://rest-api-blog.local/api/v1/articles');
            curl_setopt($curl, CURLOPT_HTTPHEADER, ['content-type: application/json']);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            $result = curl_exec($curl);
            $err = curl_error($curl);
            curl_close($curl);
            if ($err) {
                echo $err;
            } else {
                $response = json_decode($result, true);
            }   
        ?>
        <?php if (is_array($response['response']['message'])) { ?>
            <ul>
            <?php foreach($response['response']['message'] as $article) { ?>
                <li>
                    <a href="show/index.php?id=<?= $article['articleId'] ?>">
                        <?= $article['articleTitle'] ?>
                    </a>
                </li>
            <?php } ?>
            </ul>
        <?php } else { ?>
            <p>No article found!</p>
        <?php } ?>
        <a href="create">Create a new article</a>
    </body>
</html>

چنانچه این فایل را داخل مرورگر باز کنیم، می‌بینیم که ابتدا دکمه‌های لاگین و ثبت‌نام را درج نموده سپس لیستی از مقالات را به نمایش در آورده‌ایم و در انتها نیز دکمه‌ای برای افزودن یک مقالهٔ جدید اضافه کرده‌ایم اما آنچه حائز اهمیت است، تفسیر کدهای پی‌اچ‌پی موجود داخل این فایل است که در ادامه آن‌ها را مورد بررسی قرار خواهیم داد.

پس از باز کردن تگ آغازین php?> در خط دوازدهم، پیش از هر چیز متغیری ساخته‌ایم به نام curl$ که مقدار آن را برابر با فانکشن ()curl_init قرار داده‌ایم به طوری که این فانکشن وظیفه دارد تا پروسهٔ استفاده از این لایبرری را شروع نماید. سپس در خطوط چهاردهم تا شانزدهم از فانکشن ()curl_setopt استفاده نموده‌ایم که این امکان را در اختیارمان می‌گذارد تا یکسری آپشن برای کِرل در نظر بگیریم با این توضیح که CURLOPT_URL مشخص‌کنندهٔ اِندپوینت مد نظرمان است و همان‌طور که می‌بینیم، آدرس کامل اِندپوینتی که مسئول نمایش لیست مقالات است را درج کرده‌ایم و آپشن CURLOPT_HTTPHEADER این امکان را در اختیارمان می‌گذارد تا یکسری هِدِر خاصی که مد نظر داریم را به همراه ریکوئست‌مان ارسال نماییم به طوری که می‌باید یک آرایه در نظر گرفت و هِدِر‌هایی که می‌خواهیم ارسال نماییم را به عنوان اِلِمان‌های این آرایه درج نماییم؛ به طور مثال، در حال حاضر گفته‌ایم که نوع محتوا جیسیون باشد و در نهایت به CURLOPT_RETURNTRANSFER می‌رسیم که اگر برابر با مقدار true یا 1 باشد، نتیجه را در قالب یک استرینگ باز می‌گرداند.

در ادامه، متغیری ساخته‌ایم به نام result$ و مقدار آن را برابر با فانکشن ()curl_exec قرار داده و متغیر curl$ را به عنوان پارامتر ورودی این فانکشن در نظر گرفته‌ایم؛ همان‌طور که از نام این فانکشن مشخص است، وظیفه دارد تا پروسهٔ ارسال ریکوئست به اِندپوینت مد نظر را اجرا کند. همچنین متغیری دیگری تحت عنوان err$ ساخته و مقدار آن را برابر با (curl_error($curl قرار داده‌ایم که این وظیفه را دارا است تا چنانچه این لایبرری با مشکلی مواجه شد، مشکل یا اِکسپشن موجود را داخل این متغیر ذخیره سازد. در این مرحله از کار، برای آن که پروسهٔ ارسال ریکوئست را به پایان برسانیم، از دستور (curl_close($curl استفاده خواهیم کرد. 

در ادامه، با استفاده از یک دستور شرطی گفته‌ایم که اگر مقدار متغیر err$ برابر با true بود، محتویات آن را نمایش دهد و در غیر این صورت وارد بلوک else شده و ابتدا با استفاده از فانکشن ()json_decode محتویات متغیر result$ را دیکُد کرده و نتیجه را داخل متغیر جدیدی به نام response$ بریزد.

    نکته

در نظر گرفتن آرگومانی تحت عنوان true برای ()json_decode باعث می‌گردد تا خروجی آبجکت به یک آرایه مبدل گردد.

سپس با استفاده از یک دستور شرطی گفته‌ایم که اگر محتوای موجود در ['response['response']['message$ یک آرایه بود، روی آن foreach زده و با استفاده از تگ‌ <ul></ul> یک لیست ساخته و کلید ['article['articleId$ که حاوی نام مقاله می‌باشد را چاپ کنیم. همچنین برای آن که بتوانیم محتویات هر مقاله را مشاهده کنیم، از تگ <a></a> استفاده کرده و مقدار اتریبویت href آن را برابر با فولدر show سپس فایل index.php قرار داده و پارامتری تحت عنوان id که حاوی مقداری برابر با ['article['articleId$ یا به عبارتی شناسهٔ مقاله است را نیز شامل می‌شود.

در پایان لازم به یادآوری است که اگر محتوای موجود در ['response['response']['message$ یک آرایه نبود، وارد بلوک else شده و استرینگی مبنی بر اینکه «هیچ مقاله‌ای یافت نشد.» را در معرض دید کاربر قرار می‌دهیم.

online-support-icon