نحوه ایجاد و تست یک 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
پس از کلیک بر روی ارسال دکمه، باید موارد زیر را ببینید:
پس از کلیک بر روی Send
اکنون، محصولات ایجاد شده را با استفاده از 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 راهاندازی و مدیریت پایگاههای داده را برای همه پروژههای وب شما ساده میکند.