Контролюйте HTTP-взаємодії за допомогою нового методу Http::record() у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 12 квітня, 2025
Laravel презентує потужний новий інструмент для налагодження HTTP-запитів з методом Http::record(), який дозволяє переглядати реальні HTTP-запити, зберігаючи комунікацію з зовнішніми службами. Досліджуйте, як цей метод може спростити інтеграційне тестування та моніторинг продуктивності сторонніх сервісів у вашій розробці

Laravel додає потужний інструмент для відлагодження HTTP з методом Http::record(), який дозволяє вам перевіряти реальні HTTP запити, зберігаючи при цьому зв'язок зі справжніми зовнішніми сервісами.

use Illuminate\Support\Facades\Http;

// Розпочніть записування HTTP взаємодій
Http::record();

// Виконуйте реальні HTTP запити
Http::get('https://example.com/api/users');
Http::post('https://example.com/api/orders', ['product_id' => 123]); 

// Отримайте доступ до записаних запитів та відповідей
Http::recorded(function ($request, $response) {
    // Аналізуйте деталі запитів та відповідей
});

На відміну від Http::fake(), що блокує зовнішній зв'язок, цей метод забезпечує прозорість реальних запитів, дозволяючи їм виконуватись нормально.

public function testProductApiIntegration()
{
    // Розпочніть записування HTTP взаємодій
    Http::record();

    // Виконайте реальну операцію, яка здійснює API виклики
    $result = $this->app->make(ProductService::class)->syncWithExternalApi();

    // Перевірте успішність операції
    $this->assertTrue($result);

    // Тепер перевірте HTTP взаємодії
    $apiCallCount = 0;
    $allStatusCodesSuccessful = true;

    Http::recorded(function ($request, $response) use (&$apiCallCount, &$allStatusCodesSuccessful) {
        $apiCallCount++;

        // Перевірте статус відповіді
        if ($response->status() >= 400) {
            $allStatusCodesSuccessful = false;
        }

        // Логування взаємодії для відладки
        Log::debug('API Call', [
            'url' => $request->url(),
            'method' => $request->method(),
            'status' => $response->status()
        ]);
    });

    $this->assertGreaterThan(0, $apiCallCount, 'Не було здійснено жодних API викликів');
    $this->assertTrue($allStatusCodesSuccessful, 'Декілька API викликів завершились невдало');
}

Цей підхід є безцінним для інтеграційного тестування, відладки зовнішніх API комунікацій, аудиту використання API та моніторингу продуктивності сторонніх сервісів — і все це без переривання звичайного функціонування вашого застосунку. Забезпечуючи можливість перевірки без модифікацій, метод Http::record() заповнює важливу прогалину між повністю зміненими тестами та неконтрольованими живими API взаємодіями.