Multiple API in Laravel with HTTP Requests

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 

Bài Viết Liên Quan

Messsage

Nếu bạn thích chia sẻ của tôi, đừng quên nhấn nút !ĐĂNG KÝ