Laravel API: إنشاء واختبار API في Laravel
نشرت: 2023-05-10يعد Laravel Eloquent طريقة سهلة للتفاعل مع قاعدة البيانات الخاصة بك. إنه مخطط ارتباط كائني (ORM) يبسط تعقيدات قواعد البيانات من خلال توفير نموذج للتفاعل مع الجداول.
على هذا النحو ، يمتلك Laravel Eloquent أدوات ممتازة لإنشاء واختبار واجهات برمجة التطبيقات لدعم تطويرك. في هذه المقالة العملية ، سترى مدى سهولة إنشاء واختبار واجهات برمجة التطبيقات باستخدام Laravel.
في هذا العرض التوضيحي ، ستبدأ بإنشاء نموذج يمكنك استخدامه لبناء جدول API وقاعدة البيانات. بعد ذلك ، سترى كيفية إضافة وحدة تحكم كطبقة منطق عمل وطريق لإكمال واجهة برمجة التطبيقات. ستتعلم بعد ذلك كيفية إجراء اختبار واجهات برمجة التطبيقات باستخدام Postman قبل التركيز أخيرًا على المصادقة ومعالجة الأخطاء.
المتطلبات الأساسية
للبدء ، إليك ما ستحتاج إليه:
- إصدار Laravel 8 أو 9
- ملحن
- ساعي البريد
- XAMPP
- المعرفة الأساسية لواجهات برمجة التطبيقات و PHP
أساسيات API
ابدأ بإنشاء مشروع Laravel جديد باستخدام <code> composer </code>:
composer create-project laravel/laravel laravel-api-create-test
لبدء تشغيل الخادم ، قم بتنفيذ الأمر التالي ، والذي يقوم بتشغيل خادم التطبيقات على المنفذ 8000:
cd laravel-api-create-test php artisan serve
يجب أن تشاهد الشاشة التالية:
بعد ذلك ، أنشئ نموذجًا بعلامة -m
للترحيل باستخدام الكود أدناه:
php artisan make:model Product -m
الآن قم بترقية ملف الترحيل لتضمين الحقل المطلوب. أضف حقلي العنوان والوصف لنموذج المنتج وهذين الحقلين بالجدول داخل قاعدة البيانات / التهجيرات / ملف {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 / Orders / StoreProductRequest.php . لهذا العرض التوضيحي ، لا توجد عمليات التحقق من صحة.
كيفية إنشاء طريق
الخطوة الأخيرة قبل اختبار API هي إضافة مسار. للقيام بذلك ، أضف الكود التالي داخل ملف التوجيهات / api.php . أضف تعليمة use
في بداية الملف وعبارة Route
في النص الأساسي:
use App\Http\Controllers\Api\ProductController; Route::apiResource('products', ProductController::class);
قبل البدء في اختبار API ، تأكد من أن جدول المنتجات موجود في قاعدة البيانات الخاصة بك. إذا لم يكن موجودًا ، فأنشئ واحدًا باستخدام لوحة تحكم مثل XAMPP. بدلاً من ذلك ، يمكنك تنفيذ الأمر التالي لترحيل قاعدة البيانات:
php artisan migrate
كيفية اختبار API
قبل اختبار واجهة برمجة التطبيقات ، تأكد من تعيين طريقة <code> التفويض </ code> داخل app / Http / Orders / StoreProductRequest.php على إرجاع <code> صحيح </ code>.
الآن ، يمكنك إنشاء منتج جديد باستخدام Postman. ابدأ بضرب طلب POST
على عنوان URL هذا: http://127.0.0.1:8000/api/products/. نظرًا لأنه طلب POST
لإنشاء منتج جديد ، يجب عليك تمرير كائن JSON بعنوان ووصف.
{ "title":"Apple", "description":"Best Apples of the world" }
بعد النقر فوق الزر إرسال ، يجب أن ترى ما يلي:
الآن ، قم بإحضار المنتجات التي تم إنشاؤها باستخدام طلب GET
. عنوان URL هو نفسه. ستبدو النتائج كما يلي:
كيفية مصادقة API باستخدام Sanctum
المصادقة أمر بالغ الأهمية عند تأمين واجهة برمجة التطبيقات. يجعل Laravel الأمر سهلاً من خلال توفير وظائف رمز Sanctum المميز ، والذي يمكنك استخدامه كبرنامج وسيط. يقوم بتأمين واجهة برمجة التطبيقات باستخدام الرموز المميزة التي تم إنشاؤها عندما يقوم المستخدم بتسجيل الدخول باستخدام بيانات الاعتماد الصحيحة. تذكر أنه لا يمكن للمستخدمين الوصول إلى واجهة برمجة التطبيقات المؤمنة بدون رمز مميز.
الخطوة الأولى لإضافة المصادقة هي إضافة حزمة Sanctum باستخدام الكود أدناه:
composer require laravel/sanctum
بعد ذلك ، انشر ملف تكوين Sanctum:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
بعد ذلك ، أضف رمز Sanctum كبرنامج وسيط. داخل ملف app / Http / Kernel.php ، استخدم الفئة التالية واستبدل middlewareGroups
بالتعليمة البرمجية التالية في واجهة برمجة تطبيقات مجموعات البرامج الوسيطة المحمية.
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); } }
قبل أن تتمكن من اختبار المصادقة ، أنشئ مستخدمًا يستخدم البذر. يقوم الأمر التالي بإنشاء ملف UsersTableSeeder .
php artisan make:seeder UsersTableSeeder
داخل ملف database / 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') ]); } }
الآن قم بتشغيل البذر باستخدام هذا الأمر:
php artisan db:seed --class=UsersTableSeeder
الخطوة الأخيرة المتبقية في تدفق المصادقة هي استخدام البرامج الوسيطة التي تم إنشاؤها لحماية المسار. انتقل إلى ملف التوجيهات / 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" }
استخدم الرمز الذي تم استلامه كرمز لحامله وأضفه كرأس التفويض.
كيفية التعامل مع أخطاء API
كلما قمت بإرسال طلب إلى الخادم ، فإنه يستجيب. مع الاستجابة ، فإنه يرسل أيضًا رمز الحالة وفقًا لطبيعة الاستجابة. على سبيل المثال ، يشير رمز الحالة 200 إلى نجاح الطلب ، بينما يشير 404 إلى أن الخادم لا يمكنه العثور على المورد المطلوب.
ومع ذلك ، فإن رمز الحالة لا يكفي. مطلوب رسالة خطأ يمكن قراءتها من قبل الإنسان. يأتي Laravel بعدة طرق للتعامل مع الأخطاء. يمكنك استخدام كتلة try-catch ، أو الطريقة الاحتياطية ، أو إرسال استجابة مخصصة. يوضح الكود التالي الذي أضفته إلى UserController
هذا.
if (!$user || !Hash::check($request->password, $user->password)) { return response([ 'message' => ['These credentials do not match our records.'] ], 404); }
ملخص
يجعل نموذج Eloquent من Laravel إنشاء واجهات برمجة التطبيقات والتحقق منها واختبارها أمرًا سهلاً. يوفر رسم الخرائط الارتباطية للكائنات منهجًا مباشرًا للتفاعل مع قاعدة البيانات.
علاوة على ذلك ، يمكن أن يساعدك رمز Laravel's Sanctum المميز باعتباره برمجية وسيطة على تأمين واجهات برمجة التطبيقات الخاصة بك بسرعة.
وإذا كنت بحاجة إلى مزيد من التحسين ، فإن حل استضافة قاعدة بيانات Kinsta يبسط إعداد وإدارة قواعد البيانات لجميع مشاريع الويب الخاصة بك.