Використання флюентного методу Laravel для трансформації HTTP-відповідей

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 20 березня, 2025
Відкрийте для себе нову революційну функцію у Laravel — метод fluent() для роботи з відповідями HTTP! Дізнайтеся, як цей інструмент спростить взаємодію з API та зробить процес більш безпечним і зручним

Laravel покращує взаємодію з API завдяки новому методу fluent() в обробці відповідей HTTP Client. Ця функція забезпечує безпечний доступ до даних відповіді, що спрощує роботу з зовнішніми API.

Метод перетворює відповіді у "вільні" об'єкти з доступом до специфічних типів:

$response = Http::get('https://api.example.com/products/1')->fluent();
$price = $response->float('price');           // 420.69
$colors = $response->collect('colors');       // Collection(['red', 'blue'])
$onSale = $response->boolean('on_sale');      // true
$stock = $response->integer('current_stock'); // 69

Ось приклад реалізації у сервісі прогнозу погоди:

class WeatherService
{
    protected string $apiKey;
    protected string $baseUrl = 'https://weather-api.example.com';

    public function __construct(string $apiKey)
    {
        $this->apiKey = $apiKey;
    }

    public function getLocationForecast(string $city)
    {
        $response = Http::withToken($this->apiKey)
            ->get("{$this->baseUrl}/forecast", [
                'city' => $city,
                'units' => 'metric'
            ])
            ->throw()
            ->fluent();

        return [
            'location' => [
                'city' => $response->string('city'),
                'country' => $response->string('country'),
                'coordinates' => $response->collect('coordinates')->toArray()
            ],
            'current' => [
                'temperature' => $response->float('current.temperature'),
                'feels_like' => $response->float('current.feels_like'),
                'humidity' => $response->integer('current.humidity'),
                'wind_speed' => $response->float('current.wind.speed')
            ],
            'forecast' => $response->collect('forecast')->map(function ($day) {
                return [
                    'date' => Carbon::parse($day['date']),
                    'high' => (float) $day['high'],
                    'low' => (float) $day['low'],
                    'condition' => $day['condition']
                ];
            })
        ];
    }
}

Метод fluent() значно підвищує якість коду, усуваючи повторення при конвертації типів, а також забезпечує безпечніший доступ до вкладених властивостей відповіді

Популярні

Logomark Logotype

Nuxt 3 + Laravel Sanctum: Просте та надійне рішення для автентифікації вашого SPA та API

У сучасній веб-розробці аутентифікація є ключовою для захисту додатків і даних користувачів. Дізнайтеся, як модуль nuxt-sanctum-authentication спростить інтеграцію між Nuxt 3 та Laravel Sanctum, забезпечуючи надійний і зручний спосіб реалізації аутентифікації для вашого проєкту

Logomark Logotype

Обробка геопросторових даних за допомогою Laravel Magellan

Ви готові відкрити нові горизонти у роботі з геопросторовими даними в Laravel? Дізнайтеся, як за допомогою PostGIS та пакету Laravel-Magellan можна легко зберігати, запитувати та маніпулювати інформацією про розташування, перетворюючи ваші проекти на вражаючі рішення у сфері картографії та геолокації!

Logomark Logotype

Налаштування Xdebug з Docker та PHP 8.4 всього за одну хвилину

Встановлення Xdebug може бути складним завданням, але в цій статті ми розкриємо, як швидко та просто налаштувати його за допомогою Docker на прикладі Laravel. Дочитайте до кінця, щоб дізнатися, як за кілька хвилин зробити Xdebug вашим надійним помічником у розробці