به طراح وب خوش آمدید.
لاراول تعامل API را برای توسعه دهندگان وب جدید و با تجربه آسان می کند. Larvel HTTP Client مبتنی بر PHP Guzzle HTTP Client است تا درخواستهای HTTP را برای توسعهدهندگان آسانتر کند. از ویژگی های اصلی آن می توان به احراز هویت، مسیریابی و نقشه برداری کارآمد شی رابطه ای (ORM) اشاره کرد.
این مقاله نحوه استفاده از کلاینت HTTP لاراول را برای درخواست، رفع اشکال پاسخ، ایجاد میان افزار و ماکروها و موارد دیگر را پوشش می دهد.
کلاینت HTTP لاراول کار سختی را برای API برای شما انجام می دهد
خوردن کلاینت ساده HTTP برای PHP. این قابلیت برای درخواست های فرم های مختلف از جمله GET
، POST
، PUT
و DELETE
همراه با قابلیت های استریم و پرس و جوهای مرکب. با کلاینت Guzzle HTTP امکان ارسال درخواست های همزمان و ناهمزمان به سرور وجود دارد. علاوه بر این، میان افزار مناسبی برای سفارشی کردن رفتار مشتری نیز دارد.
Laravel HTTP Client یک بسته بندی است که بر روی Guzzle ساخته شده است، اما دارای ویژگی های اضافی است. این شامل پشتیبانی از درخواست های ناموفق مکرر و برخی از توابع کمکی با داده های JSON است. بسیاری از ویژگی های کلاینت های HTTP لاراول مشابه ویژگی های Guzzle هستند.
پیش نیازها
در بخشهای بعدی، بیشتر با Laravel HTTP Client آشنا میشوید. برای پیگیری، شما نیاز دارید:
- دانش اولیه لاراول، PHP و API
- PHP و Composer نصب شده است
- پستچی
نحوه درخواست
برای درک نحوه استفاده از سرویس گیرنده HTTP برای درخواست، می توانید از بسیاری از API های میزبانی شده مانند RegRes.
با وارد کردن بسته HTTP موجود در هنگام ایجاد برنامه شروع کنید. داخل Application/Http/Controllers/UserController.php کد زیر را با دستور usage در ابتدای فایل شروع کنید و بقیه کد را در تابع index اضافه کنید.
use Illuminate\Support\Facades\Http;
return Http::get("
توجه داشته باشید: برای موارد استفاده پیچیده، میتوانید با استفاده از هدر درخواست ارسال کنید withHeaders
روش.
در همان فایل، با استفاده از کد زیر یک ورودی متد جدید ایجاد کنید:
function post()
{
$response = Http::withHeaders([
'Content-Type' => 'application/json',
])->post(' [
'name' => 'morpheus',
'job' => 'leader',
]);
return $response;
}
سپس یک مسیر برای آن در داخل اضافه کنید routes/web.php فایل:
Route::get('post',[UserController::class,'post']);
اکنون می توان از پستچی برای آزمایش این مسیر استفاده کرد. Postman را باز کنید و اضافه کنید http://127.0.0.1:8000/message به عنوان url با نوع درخواست as GET
. یک بار کلیک کنید ارسالپاسخ زیر را خواهید دید:
درخواست های موازی
پرس و جوهای موازی عملکرد را تا حد زیادی بهبود می بخشد زیرا می توانید داده های بیشتری را در همان دوره دریافت کنید. کلاینت HTTP لاراول به شما امکان می دهد درخواست های موازی را با استفاده از روش pool ارسال کنید.
داخل Application/Http/Controllers/UserController.phpکد زیر را اضافه کنید:
use Illuminate\Http\Client\Pool;
function concurrent()
{
$responses = Http::pool(fn (Pool $pool) => [
$pool->get('
$pool->get('
$pool->get('
]);
return $responses[0]->ok() &&
$responses[1]->ok() &&
$responses[2]->ok();
}
سپس یک مسیر کمکی به داخل اضافه کنید routes/web.php فایل.
Route::get('concurrent',[UserController::class,'concurrent']);
مرورگر هنگام بازدید از مسیر، پاسخ زیر را برمیگرداند:
درخواست ماکرو
ماکروهای Query هنگام تعامل با مسیرهای مشترک API مفید هستند.
برای ایجاد یک ماکرو باید ماکرو را در روش بارگذاری تعریف کنید app/Http/Providers/AppServiceProvider.php فایل با استفاده از کد زیر:
use Illuminate\Support\Facades\Http;
Http::macro('reqres', function () {
return Http::baseUrl('
});
توجه داشته باشید: حتماً یک عبارت use به ابتدای فایل اضافه کنید.
سپس از ماکرو داخل استفاده کنید UserController
با افزودن کد زیر:
function macro()
{
$response = Http::reqres()->get('/users?page=2');
return $response;
}
همانطور که می بینید، از آنجایی که ماکرو از قبل در حال ایجاد است، نیازی به اضافه کردن مجدد URL کامل ندارید.
در نهایت مسیر را اضافه کنید routes/web.php فایل با استفاده از کد زیر:
Route::get('macro',[UserController::class,'macro']);
نحوه رمزگشایی پاسخ ها
برای رمزگشایی پاسخ و تأیید موفقیت آمیز بودن درخواست API، از روش state همراه با مشتری استفاده می کنید. این روش کد وضعیت ارسال شده از سرور را دریافت کرده و نمایش می دهد.
برای آزمایش این، کد ماکرو قبلی را با کد زیر در داخل جایگزین کنید Application/Http/Controllers/UserController.php فایل:
function macro()
{
$response = Http::reqres()->get('/users?page=2');
return $response->status();
}
در اینجا کد وضعیت ۲۰۰ به معنای موفقیت آمیز بودن درخواست است.
نحوه تست JSON API
لاراول چندین کمک کننده برای آزمایش API های JSON و پاسخ های آنها دارد. توابع ثانویه عبارتند از json، getJson، پست جیسون، putJson، patchJson، حذف جیسونو غیره
برای درک بهتر تست، یک مورد تست برای GET
مسیر کاربر وقتی برنامه لاراول را دانلود می کنید، نمونه تست قبلا ایجاد شده است. داخل tests/function/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 را در مسیر کاربر بازیابی می کند و بررسی می کند که آیا کد وضعیت ۲۰۰ است یا خیر.
هنگامی که کد تست را اضافه کردید، دستور زیر را در ترمینال اجرا کنید تا تست ها اجرا شوند:
./vendor/bin/phpunit
پس از اتمام تست ها، می بینید که او دو تست انجام داده است که هر دو با موفقیت انجام شده است.
به همین ترتیب، میتوانید انواع مختلف درخواستها را آزمایش کنید و از روشهای کمکی دیگر برای آزمایشهای پیشرفتهتر استفاده کنید.
نحوه مدیریت وقایع
لاراول سه رویداد ارائه می دهد که هنگام رسیدگی به درخواست های HTTP فعال می شوند.
- درخواست ارسالیعنی قبل از ارسال درخواست.
- پاسخ دریافت شدهنگامی که پاسخ دریافت می شود.
- ارتباط ناموفق بودزمانی که هیچ پاسخی دریافت نمی شود.
هر سه فعالیت شامل $request
اموال برای بازرسی Illuminate\Http\Client\Request
کپی، و ResponseReceived
اضافی دارد $response property
. آنها به ویژه برای انجام اقدامات پس از یک رویداد مفید هستند. به عنوان مثال، می توانید پس از دریافت پاسخ موفق، یک ایمیل ارسال کنید.
برای ایجاد یک رویداد و یک شنونده، به app/Providers/EventServiceProvider.php فایل کنید و آرایه listener را با کد زیر جایگزین کنید.
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
'Illuminate\Http\Client\Events\ResponseReceived' => [
'App\Listeners\LogResponseReceived',
],
];
سپس دستور زیر را در ترمینال خود اجرا کنید:
php artisan event:generate
دستور بالا ایجاد خواهد کرد app/listeners/LogResponseReceived.php شنونده کد این فایل را با کد زیر جایگزین کنید:
<?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 ها کلید موفقیت آنها هستند. با این حال، استفاده از آنها می تواند دشوار باشد.
بسیاری از چارچوبها و کتابخانهها قول میدهند که این فرآیند را آسانتر کنند، اما لاراول به دلیل سادگی و سهولت استفاده از آن متمایز است. کلاینت داخلی آنها از تماس های API ساده، تماس های همزمان API، ماکروهای API، روش های کمکی برای API های مبتنی بر JSON و موارد دیگر پشتیبانی می کند.