لاراول

ساخت REST API با Laravel Orion

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

Laravel Orion به شما این امکان را می دهد که برای توابع CRUD (ایجاد کردن، خواندن، به روز رسانی و حذف کردن) که به صورت رایج در هر کنترلر به کار می روند، در همه جا به صورت جامع استفاده نمایید. این پکیج با هماهنگی با تمام توابع لاراول مانند درخواست های مربوط به اعتبار سنجی، خط مشی های مربوط به مدیریت مجوز و منابع برای تغییر پاسخ ها(response) کار می کند.

به نظرتان بهترین مزیت این پکیج چیست؟ این پکیج با تمام مدل ها و روابطشان در لاراول کار می کند! همه چیز از جمله پیچیده ترین روابط مانند belongToMany و morphToMany پشتیبانی می شوند. یعنی شما می توانید به عنوان مثال مدل ها را از طریق یک تابع که فقط با نوشتن 2 خط کد که در یک کنترلر در دسترس است همگام سازی کنید.

بیایید نگاهی به چند نمونه بیندازیم.

Model Resources

فرض کنید شما یک مدل ‘Post’ دارید که نشان دهنده یک پست وبلاگ است و شما می خواهید آن را از طریق REST API مدیریت کنید.

با Laravel Orion می توان آن را در 3 مرحله ساده انجام داد:

ابتدا ‘PostsController’ را ایجاد کرده و از ‘OrionHttpControllersController’ گسترش دهید:


namespace App\Http\Controllers\Api;

use App\Models\Post;
use Orion\Http\Controllers\Controller;

class PostsController extends Controller
{

}

سپس ویژگی ‘model$’ را تعریف کنید و آن را به نام کلاس مدل ‘Post’ تنظیم کنید. کنترلر به صورت کامل باید به شکل زیر باشد:

<?php

namespace App\Http\Controllers\Api;

use Orion\Http\Controllers\Controller;

class PostsController extends Controller
{
    /**
     * Fully-qualified model class name
     */
    protected $model = Post::class; // or "AppModelsPost"
}

در آخر، مسیرش را در ‘api.php’ با فراخوانی ‘Orion::resource’ ایجاد کنید:

<?php

use Illuminate\Support\Facades\Route;
use Orion\Facades\Orion;
use App\Http\Controllers\PostsController;

Route::group(['as' => 'api.'], function() {
    Orion::resource('posts', PostsController::class);
});

اکنون می توانید پست های وبلاگ را از طریق REST API ایجاد، لیست، جستجو، به روز و حذف کنید. سعی کنید از طریق (POST) یک پست ایجاد کنید.

همچنین می توانید با اجرای دستور ‘php artisan route: list’ تمام مسیر های موجود را ببینید.

Relation Resources

کار با Resourceها بسیار شبیه به کار با Model هاست اما دو تفاوت جزیی دارد:

  • Relation resource controller must ها باید با 'Orion\Http\Controllers\RelationController' گسترش داده شوند.
  • باید یک ویژگی دیگر به نام ‘relation$’ در کنترلر ایجاد کنیم تا Laravel Orion بداند با کدام رابطه روی این مدل باید کار کند.

ابتدا یک کنترلر ایجاد کنید و آن را از ‘Orion\Http\Controllers\RelationController’ گسترش دهید:

<?php

namespace App\Http\Controllers\Api;

use App\Models\Post;
use Orion\Http\Controllers\RelationController;

class PostCommentsController extends RelationController
{
}

حال ویژگی های ‘model$’ و ‘reltion$’ را در کنترلری که ساخته ایم تعریف کنید. کنترلر باید به صورت زیر باشد:

<?php

namespace App\Http\Controllers\Api;

use App\Models\Post;
use Orion\Http\Controllers\RelationController;

class PostCommentsController extends RelationController
{
    /**
    * Fully-qualified model class name
    */
    protected $model = Post::class; // or "App\Models\Post"

    /**
    * Name of the relationship as it is defined on the Post model
    */
    protected $relation = 'comments';
}

در آخر، مسیر ها را با ‘Orion::morphToManyResource’ در ‘api.php’ ایجاد کنید:

<?php

use Illuminate\Support\Facades\Route;
use Orion\Facades\Orion;
use App\Http\Controllers\PostsController;
use App\Http\Controllers\PostCommentsController;

Route::group(['as' => 'api.'], function() {
    Orion::resource('posts', PostsController::class);
    Orion::morphToManyResource('posts', 'comments', PostCommentsController::class);
});

حال شما می توانید پست ها را با دیدگاه هایشان در توسط REST API مدیریت کنید.

سخن آخر

نکته امنیتی

مطمئن شوید برای مدلی که از طریق API در معرض نمایش قرار می دهید Policy ایجاد و ثبت کنید و یا استفاده از ویژگی DisableAuthorization (فقط برای آزمایش محلی) را در نظر بگیرید تا در صورت عدم ثبت یا نادرست بودن Policy، از خطای 403 جلوگیری کنید.

استفاده از Laravel Sanctum و یا موارد دیگر

به طور پیش فرض، گارد ‘api’ برای مجوز کاربر معتبر فعلی استفاده می شود. بنابراین با پیاده سازی تابع ‘resolveUser‘ در یک کنترلر، می توانید روش اعتبارسنجی کاربر را تغییر دهید:

namespace App\Http\Controllers\Api;

use Orion\Http\Controllers\Controller;
use App\Models\Post;

class PostsController extends Controller
{
    /**
     * @var string $model
     */
    protected $model = Post::class;

     /**
     * Retrieves currently authenticated user based on the guard.
     *
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     */
    public function resolveUser()
    {
        return Auth::guard('sanctum')->user();
    }
}

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا