Multiple API in Laravel with HTTP Requests

Hòa Nguyễn Coder

Published in Web Developer · Đã đăng vào tháng 8 17, 2024 8:55 AM

Thông thường chúng ta hay call nhiều API trong một lần request từ phía client. Chúng ta có thể sử dụng promise để xử lý nó ở phía client cũng được. Vì promise call multiple API quá là tốt rồi

Nay chia sẻ với các dev , bro cách chúng ta call nhiều API trong Laravel, nói chung là ở phía Backend , chúng ta dùng HTTP Requests , để xử lý vấn đề này

Cú pháp :


$promise = Http::async()->get($url);
//or
$promise = Http::async()->get($url)->then(fn (Response|TransferException $result) => $this->handleResult($result));

Okay, let's go, đi thôi các bro, dưới đây là cách ta sử dụng chúng


use Illuminate\Support\Facades\Http;
use GuzzleHttp\Promise\Utils;
use GuzzleHttp\Exception\ConnectException;
use Illuminate\Http\Client\Pool;

Route::get('multiple-request', function() {
    $responses = Utils::all([
        'foo' => Http::async()->get('https://jsonplaceholder.typicode.com/todos/1')->then(function ($response) {
            // Xử lý phản hồi foo
            return $response;
        }),
        'bar' => Http::async()->get('https://jsonplaceholder.typicode.com/todos/2')->then(function ($response) {
            // Xử lý phản hồi bar
            return $response;
        }),
        'baz' => Http::async()->get('https://jsonplaceholder.typicode.com/todos/3')->then(function ($response) {
            // Xử lý phản hồi baz
            return $response;
        }),
    ])->wait();

    // Kiểm tra kết quả của từng yêu cầu
    $fooOk = $responses['foo']->ok();
    $barSuccessful = $responses['bar']->successful();
    $connectionFailed = $responses['baz'] instanceof ConnectException;

    return [
        'foo' => $responses['foo']->ok() ? $responses['foo']->json() : 'Request to foo failed',
        'bar' => $responses['bar']->successful() ? $responses['bar']->json() : 'Request to bar failed',
        'baz' => $responses['baz']->ok() ? $responses['baz']->json() : 'Request to baz failed',
    ];
});

Trên là một cách mà ta có thể gọi không đồng bộ (asynchronous requests ), bạn sẽ được kết quả trả về như sau:

Trong HTTP Requests của Laravel, ta cũng có thể sử dụng Pool để xử lý call API



Route::get('multiple-request-using-pool', function() {

        $responses = Http::pool(fn (Pool $pool) => [
            $pool->get('https://jsonplaceholder.typicode.com/todos/1'),
            $pool->get('https://jsonplaceholder.typicode.com/todos/2'),
            $pool->get('https://jsonplaceholder.typicode.com/todos/3'),
        ]);

        $responses[0]->ok();
        $responses[1]->successful();
        // Kiểm tra và lấy nội dung từ các phản hồi
        $data = [
            'todo_1' => $responses[0]->ok() ? $responses[0]->json() : 'Request to todo 1 failed',
            'todo_2' => $responses[1]->successful() ? $responses[1]->json() : 'Request to todo 2 failed',
            'todo_3' => $responses[2]->ok() ? $responses[2]->json() : 'Request to todo 3 failed',
        ];

        return response()->json($data);

});

Kết quả cũng trả về như dưới đây :

Trên là 2 cách mà bạn có thể test thử, đôi lúc ta cũng cần xử lý 1 lần request mà gọi nhiều API 

Nếu bạn thấy đem lại kiến thức bổ ích, hãy Click xem quảng cáo trên trang website của mình nhé! 🚀