
بروزرسانی: 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\'];
نحوه ایجاد یک کنترلر
حال با اجرای دستور زیر یک فایل کنترلر برای محصول ایجاد کنید. این باعث ایجاد 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"
}

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

اکنون، محصولات ایجاد شده را با استفاده از 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);
}
خلاصه
مدل Eloquent لاراول ایجاد، اعتبارسنجی و آزمایش APIها را بدون دردسر می کند. نگاشت شی-رابطه ای آن یک رویکرد ساده برای تعامل با پایگاه داده ارائه می دهد.
علاوه بر این، توکن Laravel\'s Sanctum که به عنوان میان افزار عمل می کند، می تواند به شما کمک کند تا API های خود را به سرعت ایمن کنید.
و اگر به بهینه سازی بیشتر نیاز دارید، راه حل میزبانی پایگاه داده Kinsta راه اندازی و مدیریت پایگاه های داده را برای همه پروژه های وب شما ساده می کند.
همه برنامه ها، پایگاه های داده و سایت های وردپرس خود را به صورت آنلاین و زیر یک سقف دریافت کنید. پلت فرم ابری پر از ویژگی ها و عملکرد بالا ما شامل موارد زیر است:
- راه اندازی و مدیریت آسان در داشبورد MyKinsta
- پشتیبانی تخصصی 24 ساعته
- بهترین سخت افزار و شبکه Google Cloud Platform که توسط Kubernetes برای حداکثر مقیاس پذیری ارائه شده است
- یک ادغام Cloudflare در سطح سازمانی برای سرعت و امنیت
- مخاطبان جهانی با حداکثر 35 مرکز داده و 275 PoP در سراسر جهان به دست می آیند
با یک آزمایش رایگان میزبانی برنامه یا میزبانی پایگاه داده ما شروع کنید. برنامه های ما را بررسی کنید یا با فروشندگان صحبت کنید تا بهترین مناسب خود را پیدا کنید.