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

x

Xin chào! Hãy ủng hộ chúng tôi bằng cách nhấp vào quảng cáo trên trang web. Việc này giúp chúng tôi có kinh phí để duy trì và phát triển website ngày một tốt hơn. (Hello! Please support us by clicking on the ads on this site. Your clicks provide us with the funds needed to maintain and improve the website continuously.)

Ngoài ra, hãy đăng ký kênh YouTube của chúng tôi để không bỏ lỡ những nội dung hữu ích! (Also, subscribe to our YouTube channel to stay updated with valuable content!)

Đăng Ký