Laravel API: ایجاد و تست یک API در لاراول
انتشار: اردیبهشت 19، 1402
بروزرسانی: 07 اردیبهشت 1404

Laravel API: ایجاد و تست یک 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\');

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

protected $fillable = [\'title\', \'description\'];
باور می کنید ایده برنامه ویروسی بعدی را دارید؟ در اینجا نحوه ایجاد و آزمایش سریع API ⬇️ آمده استبرای توییت کلیک کنید

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

حال با اجرای دستور زیر یک فایل کنترلر برای محصول ایجاد کنید. این باعث ایجاد 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.
محصولات دریافت شده توسط درخواست 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\' => \'[email\xa0protected]\',
  \'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":"[email\xa0protected]",
    "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);
}
بدون نگرانی در مورد پیچیدگی های پایگاه داده آن، روی قسمت های سرگرم کننده API dev تمرکز کنید. در اینجا نحوه 🚀برای توییت کلیک کنید

خلاصه

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

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

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


همه برنامه ها، پایگاه های داده و سایت های وردپرس خود را به صورت آنلاین و زیر یک سقف دریافت کنید. پلت فرم ابری پر از ویژگی ها و عملکرد بالا ما شامل موارد زیر است:

  • راه اندازی و مدیریت آسان در داشبورد MyKinsta
  • پشتیبانی تخصصی 24 ساعته
  • بهترین سخت افزار و شبکه Google Cloud Platform که توسط Kubernetes برای حداکثر مقیاس پذیری ارائه شده است
  • یک ادغام Cloudflare در سطح سازمانی برای سرعت و امنیت
  • مخاطبان جهانی با حداکثر 35 مرکز داده و 275 PoP در سراسر جهان به دست می آیند

با یک آزمایش رایگان میزبانی برنامه یا میزبانی پایگاه داده ما شروع کنید. برنامه های ما را بررسی کنید یا با فروشندگان صحبت کنید تا بهترین مناسب خود را پیدا کنید.