Halo semua, kembali lagi kita di seri tips & trik laravel. Pada seri ini kita akan membahas tentang Laravel HTTP Pool. Apa itu? Cuss kita langsung bahas!
Definisi
Laravel menyimpan banyak sekali fitur yang ditawarkan, salah satu nya adalah HTTP Pool ini. HTTP Pool sendiri adalah mekanisme untuk menembak API secara bersamaan.
Contoh kasus yang bisa kita ambil adalah ketika kita mendevelop sebuah sistem yang didalam terdapat fitur mengambil harga ongkos kirim tiap kurir. Bayangkan kita mendapatkan akses API kurir seperti JNE, Sicepat, Wahana, dll. yang dimana ketika kita sudah dapatkan dari mana mau kemana lalu kita ingin mendapatkan range harga tiap kurir, tidak mungkin kita get satu-satu menunggu. Maka dari itu Laravel menyediakan fitur Concurrent HTTP Pool.
Studi Kasus
Kita ambil studi kasus seperti diatas dimana kita akan mengambil data ongkos kirim untuk kurir JNE & Sicepat. Maka kita buat satu buah file sebut saja GatewayCourier.php dan didalam file tersebut ada kode berikut ini
// use Illuminate\Support\Facades\Http;
// use Illuminate\Http\Client\Pool;
$request = Http::pool(fn (Pool $pool) => [
$pool->as("jne_request")->baseUrl($this->base_url_jne)->withHeaders([
'Content-Type' => 'application/x-www-form-urlencoded',
'User-Agent' => "PHP-Request",
])->asForm()->post(self::URL_REQUEST_COURIER_JNE, $jne_data),
$pool->as("sicepat_request")->baseUrl($this->base_url_sicepat)
->withHeaders([
"api-key" => $this->api_key_sicepat
])
->get(self::URL_REQUEST_COURIER_SICEPAT, $sicepat_data),
]);
$results_jne = $request["jne_request"]->json();
$results_sicepat = $request["sicepat_request"]->json();
Pada kode diatas, kita membuat variable $request untuk menyimpan hasil dari HTTP Pool. Dasar dari HTTP Pool sendiri adalah sebagai berikut
// use Illuminate\Support\Facades\Http;
HTTP::pool($callback);
Callback dari HTTP Pool sendiri wajib inisialisasi depensi dari HTTP Pool yang diambil dari use Illuminate\Http\Client\Pool;
Sehingga dari kode diatas kita bisa lihat bahwa variable $pool adalah instance dari class HTTP Pool. Lalu didalam callback barulah kita membuat inisialisasi dari setiap request API yang dituju.
Lalu, untuk mendapatkan hasil dari tiap request, kita cukup panggil dari $request['nama inisialisasi'] seperti contoh diatas jika ingin mendapatkan hasil dari API JNE, maka tinggal $request["jne_request"].
Kesimpulan
Setelah kita tau bahwa laravel mempunyai fitur Concurrent HTTP Pool yang berguna untuk menembak beberapa API dalam 1 waktu. Ini sih mungkin bisa disebut dari Asnchronous nya PHP kali ya :Dasar
Jadi dalam class HTTP::Pool membutuhkan 1 parameter berupa callback atau list request yang akan kita buat dengan menggunakan dependensi dari class Illuminate\Http\Client\Pool.
Cukup sekian tutorial laravel tips & trik kali ini, semoga bisa bermanfaat untuk kita semua. Terima kasih And see you in the next post ya guys!