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

يجب أن تشاهد الشاشة التالية:

صفحة Laravel المقصودة
Laravel

بعد ذلك ، أنشئ نموذجًا بعلامة -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'];
هل تعتقد أن لديك فكرة التطبيق الفيروسي التالية؟ إليك كيفية إنشاء 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 / 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" }
إنشاء منتج جديد في Postman
إنشاء منتج جديد في Postman

بعد النقر فوق الزر إرسال ، يجب أن ترى ما يلي:

ساعي البريد بعد النقر فوق إرسال
بعد النقر فوق إرسال

الآن ، قم بإحضار المنتجات التي تم إنشاؤها باستخدام طلب GET . عنوان URL هو نفسه. ستبدو النتائج كما يلي:

المنتجات التي تم جلبها من خلال طلب GET.
المنتجات التي تم جلبها من خلال طلب GET.

كيفية مصادقة 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); }
ركز على الأجزاء الممتعة من مطور API دون القلق بشأن تعقيدات قاعدة البيانات الخاصة به. إليك كيفية النقر للتغريد

ملخص

يجعل نموذج Eloquent من Laravel إنشاء واجهات برمجة التطبيقات والتحقق منها واختبارها أمرًا سهلاً. يوفر رسم الخرائط الارتباطية للكائنات منهجًا مباشرًا للتفاعل مع قاعدة البيانات.

علاوة على ذلك ، يمكن أن يساعدك رمز Laravel's Sanctum المميز باعتباره برمجية وسيطة على تأمين واجهات برمجة التطبيقات الخاصة بك بسرعة.

وإذا كنت بحاجة إلى مزيد من التحسين ، فإن حل استضافة قاعدة بيانات Kinsta يبسط إعداد وإدارة قواعد البيانات لجميع مشاريع الويب الخاصة بك.