به طراح وب خوش آمدید.
لاراول شیوا این یک راه آسان برای تعامل با پایگاه داده شما است. این یک نگاشت شی-رابطه ای (ORM) است که پایگاه داده های پیچیده را با ارائه مدلی برای تعامل با جداول ساده می کند.
به این ترتیب، Laravel Eloquent دارای ابزارهای عالی ساخت API و تست برای پشتیبانی از توسعه شما است. در این مقاله عملی، خواهید دید که ساخت و آزمایش API با لاراول چقدر آسان است.
در این دمو، با ایجاد یک مدل شروع میکنید که میتوانید از آن برای ساخت API و جدول پایگاه داده استفاده کنید. سپس خواهید دید که چگونه یک کنترلر را به عنوان یک لایه منطق تجاری و یک مسیر برای تکمیل API اضافه کنید. سپس یاد خواهید گرفت که چگونه تست API را با Postman انجام دهید قبل از اینکه در نهایت بر احراز هویت و رسیدگی به خطا تمرکز کنید.
پیش نیازها
برای شروع، در اینجا چیزی است که شما نیاز دارید:
مبانی API
با ایجاد یک پروژه جدید لاراول شروع کنید composer
:
composer create-project laravel/laravel laravel-api-create-test
برای راه اندازی سرور، دستور زیر را اجرا کنید که سرور برنامه را روی پورت ۸۰۰۰ راه اندازی می کند:
cd laravel-api-create-test
php artisan serve
باید صفحه زیر را ببینید:
سپس یک مدل با -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
], ۲۰۰);
}
اکنون یک کوئری ایجاد می کنید که با اجرای دستور زیر می توانید این کار را انجام دهید:
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 یک محصول جدید ایجاد کنید. با یک ضرب شروع کنید POST
درخواست به این آدرس اینترنتی: http://127.0.0.1:8000/api/products/. زیرا آن را POST
درخواست ایجاد یک محصول جدید، شما باید یک شی JSON را با عنوان و توضیحات ارسال کنید.
{
"title":"Apple",
"description":"Best Apples of the world"
}
پس از کلیک بر روی ارسال دکمه، باید موارد زیر را ببینید:
حالا محصولات تولید شده را با GET
درخواست. آدرس اینترنتی یکسان است. نتایج به صورت زیر خواهد بود:
چگونه یک API را با Sanctum تأیید کنیم
احراز هویت در ایمن سازی یک 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.']
], ۴۰۴);
}
$token = $user->createToken('my-app-token')->plainTextToken;
$response = [
'user' => $user,
'token' => $token
];
return response($response, 201);
}
}
قبل از اینکه بتوانید احراز هویت را آزمایش کنید، یک کاربر با استفاده از seders ایجاد کنید. دستور زیر ایجاد می کند 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 protected]',
'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 protected]",
"password":"password"
}
از توکنی که دریافت کرده اید به عنوان نشانه حامل استفاده کنید و آن را به عنوان هدر Authorization اضافه کنید.
نحوه رسیدگی به خطاهای API
هر زمان که درخواستی را به سرور ارسال می کنید، پاسخ می دهد. همراه با پاسخ، کد وضعیت را نیز با توجه به ماهیت پاسخ ارسال می کند. به عنوان مثال، کد وضعیت ۲۰۰ نشان می دهد که درخواست موفقیت آمیز بوده است، در حالی که کد وضعیت ۴۰۴ نشان می دهد که سرور نمی تواند منبع درخواستی را پیدا کند.
با این حال، کد وضعیت کافی نیست. یک پیام خطای قابل خواندن توسط انسان لازم است. لاراول راه های زیادی برای مدیریت خطاها دارد. می توانید از یک بلوک try-catch، یک روش بازگشتی استفاده کنید یا پاسخ خود را ارسال کنید. کد زیر که به آن اضافه کرده اید UserController
این را نشان می دهد.
if (!$user || !Hash::check($request->password, $user->password)) {
return response([
'message' => ['These credentials do not match our records.']
], ۴۰۴);
}
خلاصه
مدل Laravel Eloquent ایجاد، اعتبارسنجی و آزمایش API ها را آسان می کند. نگاشت شی رابطه ای آن یک رویکرد ساده برای تعامل با پایگاه داده ارائه می دهد.
علاوه بر این، توکن Laravel Sanctum که به عنوان یک میان افزار عمل می کند، می تواند به شما کمک کند تا به سرعت API های خود را ایمن کنید.
و اگر به بهینهسازی بیشتری نیاز دارید، راهحل میزبانی پایگاه داده Kinsta تنظیم و مدیریت پایگاههای داده برای همه پروژههای وب شما را آسان میکند.