Press "Enter" to skip to content

Http Client Laravel – Cara Gampang Bikin Request API

fadli 1

Http Client Laravel – Http Client Laravel ada salah satu fitur unggulan dari Laravel yang wajib kamu ketahui, karena fitur ini akan sangat mempermudah kamu dalam pembuatan Http Request.

Fitur ini mulai tersedia pada Laravel versi 7, fitur ini sebetulnya adalah wrapper atau improvement dari library GuzzleHttp Client.

Nanti kita akan coba rasakan betapa mudah nya membuat Http Request atau membuat API request ke website lain atau ke website sendiri dengan fitur ini.

Nanti kita akan coba praktekan juga dengan menggunakan studi kasus tertentu.

Gambaran perbandingan php curl dengan http client laravel

Sedikit gambaran, berikut adalah contoh perbandingan saat kita mengakses API / Http Request menggunakan PHP cURL dan Http Client Laravel.

Misalkan kita mengakses ke API public dengan endpoint: https://dev.farizdotid.com/api/purwakarta/kuliner Menggunakan method get.

PHP cURL:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://dev.farizdotid.com/api/purwakarta/kuliner',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Http Client Laravel:

<?php

$data = Http::get('https://dev.farizdotid.com/api/purwakarta/kuliner');
$response_body = $data->object();
var_dump($response_body);

Dengan http client laravel, terasa lebih simple kan?

Oh ya, buat kamu yang belum mengetahui apa itu API dan bagaimana cara pembuatan nya, bisa kunjungi artikel kami sebelumnya: Panduan Lengkap Belajar API Laravel + Studi Kasus..

Persiapan

Sebelum kita lanjut ke praktek nya, sebagai informasi, disini saya menggunakan Laravel versi 8, untuk cara instalasi nya kamu bisa buka halaman official nya disini.

Kalian juga bisa menggunakan laravel versi lain, asalkan minimal adalah laravel versi 7.

Kenapa? Karena fitur http client ini baru muncul pada laravel versi 7.

Instalasi guzzlehttp

Seperti yang sudah mimin sebutkan sebelumnya, bahwa fitur ini sebetulnya adalah pengembangan dari library GuzzleHttp client, maka kalian perlu menginstall library nya terlebih dahulu.

Secara default sebetulnya laravel sendiri sudah menyertakan depedency ini, tapi jika sebelumnya kamu sudah pernah menghapus depedency nya, silahkan install ulang dengan menjalankan perintah berikut:

composer require guzzlehttp/guzzle

Contoh Pembuatan Request

Agar lebih mudah dipahami, sebaiknya kita langsung ke contoh dalam pembuatan request nya saja.

Get Data

Disini kita akan mencoba get data kasus covid-19 pada seluruh provinsi Indonesia, yang sumber data nya kita ambil langsung dari website resmi satuan tugas penangan COVID-19.

Endpoint:

https://data.covid19.go.id/public/api/prov.json

Sekarang kita buat route baru terlebih dahulu didalam file “../routes/web.php”, seperti berikut:

<?php

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/kasus-covid-all-provinsi', function () {
    $data = Http::get('https://data.covid19.go.id/public/api/prov.json');
    $response = $data->object();

    dd($response);
});

Penjelasan kode diatas:

Pada baris ke-3, kita perlu memanggil facades Http nya terlebih dahulu, bagi kalian yang belum mengetahui apa itu facade, bisa kunjungi artikel kami sebelumnya: Apa itu facades laravel dan bagaimana cara membuat nya?

Pada baris ke-18, kita melakukan sebuah http request terhadap endpoint nya dengan method get, Http::get(‘https://data.covid19.go.id/public/api/prov.json’);

Pada baris ke-19, kita mengkonversi bentuk response nya menjadi sebuah object menggunakan perintah $data->object();

Method object() adalah salah satu method yang disediakan oleh laravel untuk memanipulasi bentuk response nya.

Kemudian kalau kita akses route tersebut, hasilnya akan seperti berikut:

Http Client Laravel - Cara Gampang Bikin Request API

Kalian bisa lihat gambar diatas, hasil response nya sudah dalam bentuk object.

Mengenal jenis-jenis method response nya

Sebelum lanjut lagi, ada baiknya kita berkenalan dulu dengan berbagai macam method yang digunakan untuk memanipulasi data hasil response nya.

Apa saja itu? berikut list nya:

$response->body() : string;
$response->json($key = null) : array|mixed;
$response->object() : object;
$response->collect($key = null) : Illuminate\Support\Collection;
$response->status() : int;
$response->ok() : bool;
$response->successful() : bool;
$response->redirect(): bool;
$response->failed() : bool;
$response->serverError() : bool;
$response->clientError() : bool;
$response->header($header) : string;
$response->headers() : array;

1. Method body()

Method body() digunakan untuk mencetak response nya dalam bentuk string, kalau kita terapkan pada kodingan sebelumnya, maka hasilnya akan menjadi seperti berikut:

 

Route::get('/kasus-covid-all-provinsi', function () {
    $data = Http::get('https://data.covid19.go.id/public/api/prov.json');
    $response = $data->body();

    dd($response);
});

Http Client Laravel - Cara Gampang Bikin Request API

2. Method json()

Method json() akan me-return response dalam bentuk array atau campuran, jika diterapkan pada contoh sebelumnya, maka hasilnya akan menjadi seperti berikut:

Route::get('/kasus-covid-all-provinsi', function () {
    $data = Http::get('https://data.covid19.go.id/public/api/prov.json');
    $response = $data->json();

    dd($response);
});

Http Client Laravel - Cara Gampang Bikin Request API

3. Method object()

Method ini yang sudah kita terapkan sebelumnya, akan memanipulasi response nya kedalam bentuk object.

4. Method collect()

Method ini akan memanipulasi response nya kedalam bentuk array collection.

Jadi sama seperti method json() yang bisa memanipulasi response nya kedalam bentuk array, cuma beda nya ini yaitu bukan sembarang array, melainkan array collection yang bisa kita manipulasi datanya dengan sangat mudah.

Bagi kalian yang belum mengetahui apa itu array collection, bisa kunjungi artikel kami sebelumnya: Mudahnya Mengolah Data Array Dengan Laravel Collection.

Hasil dari method ini adalah seperti berikut:

Http Client Laravel - Cara Gampang Bikin Request API

5. Method status()

Method status() digunakan untuk mendapatkan status code dari request yang kita kirim.

Status code nya itu bisa berupa 200, 300, 400, atau 500, tergantung dari hasil response yang mereka kirim.

Jika succes biasanya akan berupa 200, tapi jika error akan berupa 300 atau 400.

Kalau method ini diterapkan pada contoh sebelumnya, maka hasilnya akan menjadi seperti berikut:

Http Client Laravel - Cara Gampang Bikin Request API

Jika return 200, berarti request nya berhasil dilakukan.

Sekarang kalau misalkan url nya kita coba tambahkan string random agar request nya menjadi error seperti berikut:

Maka response code diatas akan bernilai 404.

Http Client Laravel - Cara Gampang Bikin Request API

6. Method ok()

Kalau method ini bersifat boolean, bisa bernilai true / false.

Jika status code dari response nya adalah 200, maka method ini akan menghasilkan nilai true, selain itu akan menghasilkan nilai false.

7. Method successful()

Method ini juga bernilai boolean, akan memberikan nilai true jika status code dari http response nya bernilai (>=200 dan <300).

Selain itu akan bernilai false.

Biasanya method ini digunakan untuk mengecek apakah http request nya berhasil atau tidak.

8. Method redirect()

Method ini akan bernilai true jika response status code nya (>=300 dan <400).

9. Method failed()

Method ini akan bernilai true jika response status code nya bernilai >=400.

Biasanya method ini digunakan untuk mengecek apakah http request yang dikirimkan gagal atau tidak.

Method ini pasti selalu saya pakai ketika melakukan sebuah http request, karena saya selalu melempar exception setelah menggunakan method ini.

Biasanya saya menerapkan nya seperti berikut

Route::get('/kasus-covid-all-provinsi', function () {
    $data = Http::get('https://data.covid19.go.id/public/api/prov.json-xxxs-asd-as');
    $response = $data->object();

    if ($data->failed()) {
        throw new \Exception('Gagal mengambil data', $data->status());
    }

    dd($response);
});

Kalau kalian perhatikan di baris ke-5, terdapat kondisi dimana saya melakukan pengecekan menggunakan method failed(), kemudian didalam nya melempar sebuah exception.

Jadi method failed() ini sangat berguna sekali ketika kita ingin melakukan sebuah proses saat http request nya gagal.

10. Method serverError()

Method ini akan bernilai true jika terjadi kesalahan pada sisi server, atau ketika status code nya berada pada level 500.

Selain itu akan bernilai false.

11. Method clientError()

Method ini akan bernilai true jika terjadi kesalahan pada sisi client, atau ketika status code berada pada level 400.

Selain itu akan bernilai false.

12. Method headers()

Jika kita menggunakan method ini, maka response nya akan berisikan header dari http request nya yang ditampung kedalam sebuah array.

Jika method ini kita terapkan pada contoh sebelumnya, maka hasilnya akan menjadi seperti berikut:

Route::get('/kasus-covid-all-provinsi', function () {
    $data = Http::get('https://data.covid19.go.id/public/api/prov.json');
    $response = $data->headers();

    dd($response);
});

Http Client Laravel - Cara Gampang Bikin Request API

Perhatikan gambar diatas, dengan method headers(), kita bisa dengan mudah menampilkan semua data header yang kita dapatkan dari http request nya, keren kan?

Dumping Request

Kalian pasti sudah tidak asing lagi dengan helper dd().

Yaa, helper tersebut biasanya digunakan ketika kita sedang melakukan proses debugging, perintah dd() juga akan menghentikan proses eksekusi script nya.

Pada contoh sebelumnya kita juga sudah melakukan hal ini:

Http Client Laravel - Cara Gampang Bikin Request API

Unik nya, kita bisa melakukan dumping request dengan sangat mudah, contoh nya adalah seperti berikut:

....
return Http::dd()->get('http://example.com');
....

Request POST data

Kita juga bisa melakukan request POST data dengan sangat mudah yaitu dengan menggunakan method post().

Method tersebut memiliki 2 argument, yang pertama berisikan endpoint url request nya, dan yang kedua berisi body data nya yang dibungkus kedalam bentuk array.

Untuk contoh request nya adalah seperti berikut:

<?php

use Illuminate\Support\Facades\Http;
 
$response = Http::post('http://example.com/users', [
    'name' => 'Steve',
    'role' => 'Network Administrator',
]);

Request GET dengan query parameter

Sama halnya seperti POST data, kita juga bisa melakukan request data dengan method GET yang disertai dengan query parameter nya.

Contoh nya adalah seperti berikut:

$response = Http::get('http://example.com/users', [
    'name' => 'Taylor',
    'page' => 1,
]);

Kita bisa menaruh data query parameter nya pada segment ke-2 didalam method get().

Request get diatas sebetulnya sama saja seperti kita mengakses url seperti berikut

....
example.com/users?name=Taylor?page=1
....

Menambahkan Header saat request

Kita juga bisa membawa atau menambahkan header saat melakukan request API ke endpoint tertentu menggunakan method withHeaders().

Kita bisa mengisi segala jenis headers nya dalam bentuk array, contoh nya adalah seperti berikut:

....
$response = Http::withHeaders([
    'X-First' => 'foo',
    'X-Second' => 'bar',
    'Accept' => 'application/json'
])->post('http://example.com/users', [
    'name' => 'Taylor',
]);

Authentication

Dengan Http Client Laravel, kita juga melewati proses otentikasi dengan sangat mudah.

Basic Auth / Digest Auth

Kita bisa dengan mudah nya melewati proses basic / digest authentication dengan menggunakan method withBasicAuth() atau withDigestAuth().

Kedua method tersebut sama-sama memiliki 2 parameter, yang pertama yaitu untuk mengisi username nya, dan yang kedua yaitu untuk mengisi password nya, contoh:

....
// Basic authentication...
$response = Http::withBasicAuth('taylor@laravel.com', 'secret')->post(/* ... */);
 
// Digest authentication...
$response = Http::withDigestAuth('taylor@laravel.com', 'secret')->post(/* ... */);

Bearer Tokens

Kalau proses otentikasi nya menggunakan bearer token, laravel juga sudah menyediakan sebuah method khusus utk membawa bearer token nya.

Yaitu dengan menggunakan method withToken(), sebagai contoh:

....
$response = Http::withToken('token')->post(/* ... */);
....

asdsadsad

Error Handling

Seperti yang sudah mimin sebutkan sebelumnya, bahwasanya dengan menggunakan Http Client Laravel, kita bisa dengan mudah mengetahui apakah request tersebut berhasil atau tidak.

Jika gagal pun kita masih bisa mengelompokkan nya lagi kedalam beberapa kategori, yaitu apakah gagal nya karena server error atau karena client error.

Berikut mimin rangkum lagi beberapa method yang bisa kalian gunakan pada saat proses error handling:

// Determine if the status code is >= 200 and < 300...
$response->successful();
 
// Determine if the status code is >= 400...
$response->failed();
 
// Determine if the response has a 400 level status code...
$response->clientError();
 
// Determine if the response has a 500 level status code...
$response->serverError();

Sekian untuk materi kali ini, semoga bermanfaat.. Terima kasih.

Untuk informasi lebih lengkap mengenai Http Client Laravel, kalian juga bisa mengunjungi dokumentasi resmi nya disini.

Support Us

Jika artikel ini bermanfaat untuk kamu, membantu menyelesaikan masalah yang sedang kamu hadapi, kamu juga bisa dukung kami dengan mengunjungi halaman berikut: https://saweria.co/sangcahayaid

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: