پیاده سازی وب سرویس با Restful Api در فریمورک YII2


توی این نوشته میخواهیم یک وب سرویس Restful Api را در فریمورک Yii2 پیاده سازی کنیم.

اول راجع به فریمورک yii بگم که این فریمورک از سیستم های نسبتا با سابقه و محبوب زبان برنامه نویسی php با معماری MVC هست و آخرین نسخه اون تا امروز 2.0.15 هست و اینکه نسخه ۲ اون نسبت به نسخه ۱ تغییرات خیلی خیلی زیادی کرده.

از جمله امتیازات این فریمورک سرعت خوب و همچنین سهولت پیاده سازی پروژه های Rest هست.

اما در مورد Restful بطور مختصر بگم که اسم این تکنولوژی، مختصر representational state transfer و بمنظور ارتباط بین برنامه های مختلف به کار میره و یه جورایی شبیه زبان انگلیسی توی دنیای آدمهاست یعنی اگه شما دو تا برنامه داشته باشید که با دو زبان مختلف یا یک زبان مشترک نوشته شده باشند وقتی قرار هست باهمدیگه ارتباط برقرار کنند از این استاندارد استفاده می کنند و درواقع یک web service پیاده سازی میشه.

اگه با مفاهیم Rest آشنایی کافی ندارید پیشنهاد می کنم اول یه آشنایی مختصر با اون پیدا کنید و بعد ادامه مقاله را مطالعه کنید.

اده سازی وپ
اده سازی وپ

- شما قراره با یه مدل کار کنید پس اسم controller را همنام مدل بگذارید.

- کلاس ما باید از کلاس ActiveController باید مشتق بشه.

  • طبیعتا وقتی از کلاس ActiveController استفاده می کنید باید اون را use کنید.
  • متغیر public به نام modelClass تعریف کنید و مسیر model مورد نظر خودتون را به اون بدین

بطور خلاصه controller ما به این شکل در میاد:

namespace app\controllers;
use yii\rest\ActiveController;

class StudentController extends ActiveController
{
public $modelClass = 'app\models\Student';
}

توجه کنید که مسیر namespace ها صحیح باشند مثلا اگه از ساختار advanced استفاده میکنید به جای app باید frontend نوشته بشه.

حالا توی فایل config و در قسمت urlmanager باید controller را معرفی کنیم:

'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'student'],
]

یه کار دیگه توی فایل config مونده که انجام بشه و اون فعالسازی ورودی json هست که باید کامپوننت اون را فعال کنیم.

پس در قسمت components ، این تکه کد را اضافه کنید:

'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
]

خوب کار ما تموم شد....

الان بدون اینکه controller ما متدی داشته باشه میتونیم از اون خروجی json بگیریم و ورودی بدیم مثلا:

GET /students: لیست دانش آموزان

POST /students: اضافه کردن کاربر جدید

GET /students/15 : مشخصات کاربر شماره ۱۵

DELETE /students/15: حذف کاربر شماره ۱۵

- نکته ۱: در نامگذاری ها دقت کنید.

- نکته۲: به s جمع انتهای آدرس ها دقت کنید.

- نکته 3: برای تست خروجی میتونید از نرم افزار معروف postman استفاده کنید.