برنامه نویسی

نحوه ایجاد و تست یک API در لاراول

Laravel Eloquent یک راه آسان برای تعامل با پایگاه داده شما است. این یک نگاشت شی رابطه ای (ORM) است که پیچیدگی های پایگاه داده را با ارائه مدلی برای تعامل با جداول ساده می کند.

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

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

پیش نیازها

برای شروع، در اینجا چیزی است که شما نیاز دارید:

مبانی API

با ایجاد یک پروژه جدید لاراول شروع کنید composer:

composer create-project laravel/laravel laravel-api-create-test
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای راه اندازی سرور، دستور زیر را اجرا کنید که سرور برنامه را روی پورت 8000 اجرا می کند:

cd laravel-api-create-test
php artisan serve
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

باید صفحه زیر را ببینید:

سپس یک مدل با a ایجاد کنید -m برای مهاجرت با استفاده از کد زیر پرچم گذاری کنید:

php artisan make:model Product -m
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون فایل مهاجرت را ارتقا دهید تا فیلد مورد نیاز را در خود داشته باشد. فیلدهای عنوان و توضیحات را برای مدل محصول و این دو فیلد جدول را در داخل اضافه کنید database/migrations/{date_stamp}_create_products_table.php فایل.

$table->string('title');
$table->longText('description');
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله بعدی این است که این فیلدها را پر کنید. داخل app/Models/Product.php، ساختن title و description فیلدهای قابل پر کردن

protected $fillable = ['title', 'description'];
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نحوه ایجاد یک کنترلر

حال با اجرای دستور زیر یک فایل کنترلر برای محصول ایجاد کنید. این باعث ایجاد app/Http/Controllers/Api/ProductController.php فایل.

php artisan make:controller Api\\ProductController --model=Product
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون منطق ایجاد و بازیابی محصولات را اضافه کنید. درون index روش، کد زیر را برای بازیابی همه محصولات اضافه کنید:

$products = Product::all();
return response()->json([
    'status' => true,
    'products' => $products
]);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از آن، شما باید یک را اضافه کنید StoreProductRequest کلاس برای ذخیره محصولات جدید در پایگاه داده. کلاس زیر را در بالای همان فایل اضافه کنید.

public function store(StoreProductRequest $request)
 {
    $product = Product::create($request->all());

    return response()->json([
        'status' => true,
        'message' => "Product Created successfully!",
        'product' => $product
    ], 200);
 }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون درخواست را ایجاد می کنید که با اجرای دستور زیر می توانید این کار را انجام دهید:

php artisan make:request StoreProductRequest
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر می خواهید اعتبار سنجی اضافه کنید، می توانید از آن استفاده کنید app/Http/Requests/StoreProductRequest.php فایل. برای این نمایش، هیچ اعتبارسنجی وجود ندارد.

چگونه یک مسیر ایجاد کنیم

آخرین مرحله قبل از آزمایش API اضافه کردن یک مسیر است. برای انجام این کار، کد زیر را در داخل آن اضافه کنید routes/api.php فایل. اضافه کردن use عبارت در ابتدای فایل و Route بیان در بدن:

use App\Http\Controllers\Api\ProductController;
Route::apiResource('products', ProductController::class);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

php artisan migrate
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

چگونه یک API را تست کنیم

قبل از آزمایش API، مطمئن شوید که روش authorize در داخل آن است app/Http/Requests/StoreProductRequest.php برای بازگشت true تنظیم شده است.

اکنون، می توانید با استفاده از Postman یک محصول جدید ایجاد کنید. با زدن a شروع کنید POST درخواست به این URL: http://127.0.0.1:8000/api/products/. زیرا این یک است POST درخواست ایجاد یک محصول جدید، باید یک شی JSON را با عنوان و توضیحات ارسال کنید.

{
    "title":"Apple",
    "description":"Best Apples of the world"
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ایجاد یک محصول جدید در Postman

ایجاد یک محصول جدید در Postman

پس از کلیک بر روی ارسال دکمه، باید موارد زیر را ببینید:

پستچی پس از کلیک بر روی ارسال

پس از کلیک بر روی Send

اکنون، محصولات ایجاد شده را با استفاده از GET درخواست. آدرس اینترنتی یکسان است. نتایج به صورت زیر خواهد بود:

محصولات دریافت شده توسط درخواست GET.

چگونه با استفاده از Sanctum یک API را تأیید کنیم

هنگام ایمن سازی API، احراز هویت بسیار مهم است. لاراول با ارائه عملکرد توکن Sanctum که می توانید از آن به عنوان میان افزار استفاده کنید، کار را آسان می کند. API را با استفاده از توکن هایی که هنگام ورود کاربر با استفاده از اعتبارنامه های صحیح ایجاد می شود، ایمن می کند. به یاد داشته باشید که کاربران نمی توانند بدون توکن به API ایمن دسترسی پیدا کنند.

اولین قدم برای افزودن احراز هویت، افزودن بسته Sanctum با استفاده از کد زیر است:

composer require laravel/sanctum
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس فایل پیکربندی Sanctum را منتشر کنید:

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از آن، توکن Sanctum را به عنوان میان افزار اضافه کنید. درون app/Http/Kernel.php فایل، از کلاس زیر استفاده کرده و جایگزین کنید middlewareGroups با کد زیر در API گروه های میان افزار محافظت شده.

use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        EnsureFrontendRequestsAreStateful::class,
        'throttle:api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله بعدی ایجاد یک است UserController و کد را اضافه کنید تا توکن را برای احراز هویت دریافت کنید.

php artisan make:controller UserController
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از ایجاد UserController، به app/Http/Controllers/UserController.php فایل و کد موجود را با کد زیر جایگزین کنید:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
class UserController extends Controller
{
    // 

    function index(Request $request)
    {
        $user= User::where('email', $request->email)->first();
        // print_r($data);
            if (!$user || !Hash::check($request->password, $user->password)) {
                return response([
                    'message' => ['These credentials do not match our records.']
                ], 404);
            }

             $token = $user->createToken('my-app-token')->plainTextToken;

            $response = [
                'user' => $user,
                'token' => $token
            ];

             return response($response, 201);
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

قبل از اینکه بتوانید احراز هویت را آزمایش کنید، کاربری ایجاد کنید که از seeders استفاده می کند. دستور زیر a را ایجاد می کند UsersTableSeeder فایل.

php artisan make:seeder UsersTableSeeder
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

درون پایگاه داده/seeders/UsersTableSeeder.php در فایل، کد موجود را با کد زیر جایگزین کنید تا کاربر را شناسایی کنید:

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => 'John Doe',
            'email' => 'john@doe.com',
            'password' => Hash::make('password')
        ]);
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون seeder را با استفاده از این دستور اجرا کنید:

php artisan db:seed --class=UsersTableSeeder
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آخرین مرحله باقی مانده در جریان احراز هویت، استفاده از میان افزار ایجاد شده برای محافظت از مسیر است. حرکت به routes/api.php فایل و مسیر محصولات را در میان افزار اضافه کنید.

use App\Http\Controllers\UserController;

Route::group(['middleware' => 'auth:sanctum'], function () {
    Route::apiResource('products', ProductController::class);
});

Route::post("login",[UserController::class,'index']);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

یک خطای سرور داخلی پس از افزودن مسیر

اما هنگامی که وارد شوید، یک توکن دریافت کنید و از آن در هدر استفاده کنید، شما را احراز هویت می کند و شروع به کار می کند. می توانید یک درخواست POST به http://127.0.0.1:8000/api/login با بدنه زیر ارسال کنید:

{
    "email":"john@doe.com",
    "password":"password"
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

احراز هویت موفقیت آمیز و توکن حامل

از توکن دریافتی به عنوان نشانه حامل استفاده کنید و آن را به عنوان هدر مجوز اضافه کنید.

اضافه کردن نشانه حامل به عنوان سربرگ مجوز

نحوه مدیریت خطاهای API

هر زمان که درخواستی را به سرور ارسال می کنید، پاسخ می دهد. با پاسخ، کد وضعیت را نیز با توجه به ماهیت پاسخ ارسال می کند. به عنوان مثال، یک کد وضعیت 200 نشان می دهد که درخواست با موفقیت انجام شده است، و یک 404 نشان می دهد که سرور نمی تواند منبع درخواستی را پیدا کند.

با این حال، یک کد وضعیت کافی نیست. یک پیام خطای قابل خواندن توسط انسان لازم است. لاراول راه های زیادی برای مدیریت خطاها دارد. می توانید از یک بلوک try-catch، روش بازگشتی استفاده کنید یا یک پاسخ سفارشی ارسال کنید. کد زیر را که به آن اضافه کردید UserController این را نشان می دهد.

if (!$user || !Hash::check($request->password, $user->password)) {
    return response([
        'message' => ['These credentials do not match our records.']
    ], 404);
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خلاصه

مدل Eloquent لاراول ایجاد، اعتبارسنجی و آزمایش APIها را بدون دردسر می کند. نگاشت شی-رابطه ای آن یک رویکرد ساده برای تعامل با پایگاه داده ارائه می دهد.

علاوه بر این، توکن Laravel’s Sanctum که به عنوان میان افزار عمل می کند، می تواند به شما کمک کند تا API های خود را به سرعت ایمن کنید.

و PS، اگر به بهینه‌سازی بیشتر نیاز دارید، راه‌حل میزبانی پایگاه داده Kinsta راه‌اندازی و مدیریت پایگاه‌های داده را برای همه پروژه‌های وب شما ساده می‌کند.

نوشته های مشابه

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

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

همچنین ببینید
بستن
دکمه بازگشت به بالا