احسان رضایی

یک توسعه دهنده

معرفی API Resources در لاراول

در laravel , / تاریخ ارسال 08-11-1401 / 0 نظر / آخرین ویرایش 29-08-1403

هنگام پیاده سازی API یکی از شیوه های بسیار کاربردی و مفیدی که میشه استفاده کرد API Resources هست. با استفاده از این روش به جای پاس دادن مدل یا آرایه ای از مدل ها به عنوان response، لایه ای بین Eloquent و خروجی JSON تعریف میشه. در این لایه که Resource/منبع نام داره دقیقا مشخص میکنیم چه دیتایی به عنوان JSON پاس بدیم. این کار باعث میشه response همون چیزی باشه که نیازش داریم، بدون اضافات. یا اینکه ممکن هست لازم بشه همیشه همراه با مدل، روابط خاصی رو هم داشته باشیم و یا در جاهای خاص، خروجی متفاوتی از یک مدل رو به نمایش بذاریم.

به عنوان مثال جدول کاربران شامل نام و نام خانوادگی، بیو، ایمیل، تاریخ ایجاد، بروزرسانی و حذف(deleted_at) رو در نظر بگیرید. برای سرویس لیست کاربران قرار نیست متن بیو رو نشون بدیم. deleted_at هم که برای soft delete هست و 99 درصد اوقات کلا نیازی به نمایش نداریم. پس همونطور که جلوتر پیاده سازیش رو توضیح میدم، دوتا Resource ایجاد میکنیم، یکی برای لیست کاربران که فیلدهای id, name, email  در اون تعریف میشه و یکی هم برای نمایش تکی کاربر که شامل تمام فیلدهاست.

شاید با خودتون فکر کنید بدون API Resources در لاراول هم میشه این کار رو انجام داد. بله اما تمیز نیست و قابلیت استفاده مجدد مثل Resources هم ندارید.

ایجاد Resources

با استفاده از artisan و دستور make:resource به راحتی میتونید resource جدید ایجاد کنید.

php artisan make:resource UserResource

در مسیر App\Http\Resources منبع جدید ایجاد میشه. اینجاست که باید مشخص کنیم دقیقا چه اطلاعاتی به عنوان response پاس داده بشه.

<?php
 
namespace App\Http\Resources;
 
use Illuminate\Http\Resources\Json\JsonResource;
 
class UserResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'email' => $this->email,
        ];
    }
}

در مثال بالا مشخص شد هنگام استفاده از این منبع، id, name, email از مدل User به عنوان خروجی JSON ارسال بشه.

استفاده از Resource 

برای استفاده از Resource دو حالت داریم. تکی و لیست. برای حالت تکی، یعنی زمانی که میخواییم فقط یک مدل(طبق مثال یک user یا یک سطر از جدول users) رو پاس بدیم کافی هست که با استفاده از دستور new یک شی از منبع مورد نظرمون ایجاد، مدل رو به عنوان پارامتر فرستاده و خروجی رو return کنیم.

class UserController extends Controller
{
    public function view(User $user)
    {
        return new UserResource($user);
    }
// ...

 برای حالت دوم، یعنی لیستی از کاربران، از متد collection استفاده میکنیم.

class UserController extends Controller
{
    public function index()
    {
        $users = User::query()->latest()->get();
        return UserResource::collection($users);
    }
// ...

مطالعه بیشتر...

پیشنهاد

کتاب‌ها

کتاب الگوهای طراحی به بیان ساده(design patterns / دیزاین پترن)

در مهندسی نرم افزار، design patterns(الگوهای طراحی) راه حل‌های قابل استفاده برای مشکلاتی هستند که معمولاً در طراحی نرم‌افزار اتفاق می افتند.

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

کتاب refactoring / ریفکتورینگ

Refactoring مجموعه‌ای از تکنیک‌هاست که به منظور اصلاح و بهبود کدهای قبلی بدون تغییر در عملکرد و رفتارشان جهت خوانایی، کارامدی و قابلیت نگهداری بیشتر انجام می‌شود.

در کتاب Refactoring اثر Martin Fowler نوشته شده: refactoring تکنیک مرتب/منظم سازی برای تجدید ساختار کد موجود است. تغییر ساختار داخلی کد بدون تغییر رفتار خارجی آن.

refactoring یک سرمایه‌گذاری و راه حلی برای مقابله با کد کثیف و بدهی فنی است که باعث کاهش هزینه‌های توسعه نرم‌افزار در آینده خواهد شد.

ارسال نظر