كيفية استخدام عميل Laravel المدمج للتفاعل مع واجهات برمجة التطبيقات الخارجية
نشرت: 2023-04-24يجعل Laravel تفاعلات واجهة برمجة التطبيقات أمرًا سهلاً لمطوري الويب الجدد وذوي الخبرة. تم إنشاء عميل Larvel HTTP فوق عميل Guzzle HTTP الخاص بـ PHP لمنح المطورين تجربة أكثر سلاسة عند إجراء طلبات HTTP. تشمل ميزاته الأساسية المصادقة والتوجيه ورسم الخرائط العلائقية للكائنات (ORM).
ستستكشف هذه المقالة استخدام عميل HTTP في Laravel لتقديم الطلبات وتصحيح الاستجابات وإنشاء برمجيات وسيطة ووحدات ماكرو والمزيد.
عميل Laravel HTTP يقوم بالعمل الشاق من أجلك لواجهات برمجة التطبيقات
Guzzle هو عميل HTTP بسيط لـ PHP. يوفر وظائف لطلبات النماذج المختلفة ، بما في ذلك GET
و POST
و PUT
و DELETE
جنبًا إلى جنب مع إمكانيات البث والطلبات متعددة الأجزاء. باستخدام عميل Guzzle HTTP ، يمكن إرسال طلبات متزامنة وغير متزامنة إلى الخادم. علاوة على ذلك ، يأتي أيضًا مع برمجيات وسيطة مناسبة لتخصيص سلوك العميل.
عميل HTTP الخاص بـ Laravel عبارة عن غلاف مبني على Guzzle ولكن بوظائف إضافية. يتضمن دعمًا لإعادة محاولة الطلبات الفاشلة وبعض الوظائف المساعدة مع بيانات JSON. تتشابه معظم وظائف عملاء Laravel HTTP مع Guzzle.
المتطلبات الأساسية
في الأقسام التالية ، ستتعلم المزيد عن عميل HTTP في Laravel. للمتابعة ، ستحتاج إلى:
- معرفة أساسية بـ Laravel و PHP و APIs
- تم تثبيت PHP و Composer
- ساعي البريد
كيفية تقديم الطلبات
لفهم كيفية استخدام عميل HTTP لتقديم طلب ، يمكنك الاستفادة من الكثير من واجهات برمجة التطبيقات المستضافة ، مثل ReqRes.
ابدأ باستيراد حزمة HTTP المضمنة عند إنشاء التطبيق. داخل ملف App / Http / Controllers / UserController.php ، أضف الكود التالي ، بدءًا من عبارة الاستخدام في بداية الملف والشفرة المتبقية داخل دالة الفهرس.
use Illuminate\Support\Facades\Http; return Http::get("https://reqres.in/api/users?page=2");
ملاحظة: لحالات الاستخدام المعقدة ، يمكنك أيضًا إرسال الطلب برؤوس باستخدام طريقة withHeaders
.
في نفس الملف ، قم بإنشاء منشور طريقة جديد باستخدام الكود أدناه:
function post() { $response = Http::withHeaders([ 'Content-Type' => 'application/json', ])->post('https://reqres.in/api/users', [ 'name' => 'morpheus', 'job' => 'leader', ]); return $response; }
ثم أضف مسارًا له داخل ملف التوجيهات / web.php :
Route::get('post',[UserController::class,'post']);
الآن ، يمكن استخدام ساعي البريد لاختبار هذا الطريق. افتح Postman وأضف http://127.0.0.1:8000/post كعنوان URL ، مع نوع الطلب مثل GET
. بمجرد النقر فوق إرسال ، سترى الرد التالي:
الطلبات المتزامنة
تعمل الطلبات المتوازية على تحسين الأداء بشكل كبير حيث يمكنك جلب المزيد من البيانات في نفس الفترة. يتيح عميل HTTP في Laravel تنفيذ الطلبات المتزامنة باستخدام طريقة التجمع.
داخل App / Http / Controllers / UserController.php ، أضف الكود التالي:
use Illuminate\Http\Client\Pool; function concurrent() { $responses = Http::pool(fn (Pool $pool) => [ $pool->get('https://reqres.in/api/users?page=2'), $pool->get('https://reqres.in/api/users/2'), $pool->get('https://reqres.in/api/users?page=2'), ]); return $responses[0]->ok() && $responses[1]->ok() && $responses[2]->ok(); }
ثم أضف المسار الداعم داخل ملف التوجيهات / web.php .
Route::get('concurrent',[UserController::class,'concurrent']);
يقدم المتصفح الاستجابة التالية عند زيارة المسار:
طلب وحدات ماكرو
طلبات وحدات الماكرو مفيدة عند التفاعل مع مسارات API الشائعة.
لإنشاء الماكرو ، تحتاج إلى تحديد الماكرو داخل طريقة التمهيد لملف app / Http / Providers / AppServiceProvider.php باستخدام الكود أدناه:
use Illuminate\Support\Facades\Http; Http::macro('reqres', function () { return Http::baseUrl('https://reqres.in/api'); });
ملاحظة: تأكد من إضافة بيان الاستخدام في بداية الملف.
بعد ذلك ، استخدم الماكرو داخل UserController
عن طريق إضافة التعليمات البرمجية التالية:
function macro() { $response = Http::reqres()->get('/users?page=2'); return $response; }
كما ترى ، نظرًا لأنه يتم إنشاء الماكرو بالفعل ، فلن تضطر إلى إضافة عنوان URL الكامل مرة أخرى.
أخيرًا ، أضف مسارًا في ملف path / web.php باستخدام الكود أدناه:
Route::get('macro',[UserController::class,'macro']);
كيفية فك الاستجابات
لفك تشفير استجابة والتأكد من نجاح طلب واجهة برمجة التطبيقات ، يمكنك استخدام طريقة الحالة المضمنة في العميل. تحصل هذه الطريقة على رمز الحالة المرسل من الخادم وتعرضه.
لاختبار ذلك ، استبدل رمز الماكرو السابق بالرمز أدناه داخل ملف App / Http / Controllers / UserController.php :
function macro() { $response = Http::reqres()->get('/users?page=2'); return $response->status(); }
هنا ، يعني رمز الحالة 200 أن الطلب كان ناجحًا.
كيفية اختبار JSON APIs
لدى Laravel العديد من المساعدين لاختبار واجهات برمجة تطبيقات JSON واستجاباتها. تتضمن الوظائف المساعدة json و getJson و postJson و putJson و patchJson و deleteJson وما إلى ذلك.
لفهم الاختبار بشكل أفضل ، قم بإنشاء سيناريو اختبار لمسار مستخدم GET
. عندما تقوم بتشغيل تطبيق Laravel ، يكون المثال قد تم إنشاؤه بالفعل. داخل ملف الاختبارات / Feature / ExampleTest.php ، استبدل الكود الحالي بما يلي:
<?php namespace Tests\Feature; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; class ExampleTest extends TestCase { /** * A basic test example. * * @return void */ public function test_example() { $response = $this->getJson('/users'); $response->assertStatus(200); } }
يجلب الرمز المضاف بيانات JSON في مسار المستخدم ويتحقق مما إذا كان رمز الحالة هو 200 أم لا.
بمجرد إضافة رمز الاختبار ، قم بتشغيل الأمر التالي في جهازك لتشغيل الاختبارات:
./vendor/bin/phpunit
بمجرد اكتمال الاختبارات ، ستلاحظ أنه تم إجراء اختبارين ، وكلاهما كان ناجحًا.
وبالمثل ، يمكنك التحقق من أنواع الطلبات المختلفة واستخدام طرق مساعدة أخرى لإجراء اختبارات أكثر تعقيدًا.
كيفية التعامل مع الأحداث
يقدم Laravel ثلاثة أحداث ليتم إطلاقها عند التعامل مع طلبات HTTP.
- RequestSending ، أي قبل إرسال الطلب.
- ResponseReceived ، وهو عند تلقي الرد.
- فشل الاتصال ، وهو عندما لا يتم تلقي أي رد.
تشتمل الأحداث الثلاثة جميعها على الخاصية $request
لفحص نسخة Illuminate\Http\Client\Request
، ولدى ResponseReceived
$response property
إضافية. هذه مفيدة بشكل خاص لأداء الإجراءات بعد الحدث. على سبيل المثال ، قد ترغب في إرسال بريد إلكتروني بعد الحصول على رد ناجح.
لإنشاء حدث ومستمع ، انتقل إلى ملف app / Providers / EventServiceProvider.php واستبدل مصفوفة الاستماع بالكود التالي.
protected $listen = [ Registered::class => [ SendEmailVerificationNotification::class, ], 'Illuminate\Http\Client\Events\ResponseReceived' => [ 'App\Listeners\LogResponseReceived', ], ];
ثم قم بتشغيل الأمر التالي في جهازك الطرفي:
php artisan event:generate
سيقوم الأمر أعلاه بإنشاء app / Listeners / LogResponseReceived.php listener. استبدل رمز هذا الملف بالرمز أدناه:
<?php namespace App\Listeners; use Illuminate\Http\Client\Events\ResponseReceived; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Log; class LogResponseReceived { /** * Create the event listener. * * @return void */ public function __construct(Request $request, Response $response) { Log::channel('stderr')->info($response->status()); } /** * Handle the event. * * @param \Illuminate\Http\Client\Events\ResponseReceived $event * @return void */ public function handle(ResponseReceived $event) { } }
تتم طباعة سجل المعلومات الخاص برمز الحالة في الجهاز.
ملخص
سواء تم إنشاء موقع ويب أو تطبيق ويب بواسطة مؤسسة أو مطور مستقل ، فإن واجهات برمجة التطبيقات (API) هي مفتاح نجاحها. ومع ذلك ، قد يكون استخدامها صعبًا.
تعد العديد من الأطر والمكتبات بتبسيط هذه العملية ، لكن Laravel يتميز بتركيزه على البساطة وسهولة الاستخدام. يدعم عميلهم المدمج مكالمات API السهلة ، ومكالمات API المتزامنة ، ووحدات ماكرو API ، وطرق المساعدة لواجهات برمجة التطبيقات المستندة إلى JSON ، والمزيد.