Cara Memanggil RESTful API di Laravel

| | | Laravel
Cara Memanggil RESTful API di Laravel

Di zaman sekarang membangun aplikasi hampir selalu bergantung pada RESTful API, maka kali ini saya coba membagi pengalaman memanggil RESTful API di Laravel. di tutorial ini saya pakai Laravel 11, dan HttpClient yang dipakai adalah Http facade bawaan Laravel yang sebenarnya dibungkus dari Guzzle. jadi tidak perlu install library tambahan.

Video tutorial : Menggunakan cURL untuk GET dan POST ke API di PHP atau di Laravel

Berikut ini video pembahasan cara Menggunakan cURL untuk GET dan POST ke API di PHP cara ini bisa digunakan di Laravel simak videonya berikut ini.

Install Laravel

okay disini kita coba menginstall laravel dulu. bagi yang masih bingung install laravel bisa kunjungi tutorial lengkapnya di Cara Install Laravel di Windows.

disini saya pakai project laravel yang kosong belum diisi apa pun.

Menggunakan HTTP Client Laravel

untuk memanggil HTTP request di Laravel, kita tidak perlu install library tambahan. sejak Laravel 7, sudah tersedia Illuminate\Support\Facades\Http yang dibungkus dari Guzzle. jadi tinggal dipakai langsung.

kalau penasaran library yang dipakai di baliknya, Guzzle tetap bisa diinstall manual untuk project non-Laravel atau versi lama:

composer require guzzlehttp/guzzle:^7.0

Penjelasan:

  • composer require : meminta library untuk diinstall ke project
  • guzzlehttp/guzzle:^7.0 : nama library dan versinya

tapi di Laravel 7 ke atas, Http facade sudah termasuk, jadi langsung saja ke pemanggilan API.

Memanggil API di Laravel project

saya pakai endpoint https://reqres.in/api/users/ yang mengembalikan data users berisi id, email, first_name, last_name, dan avatar.

contoh responses http reqres.in

Pemakaian pemanggilan HTTP RESTful di controller Laravel

pengkodean di bawah saya taruh di controller app/Http/Controllers/UsersController.php:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;

class UsersController extends Controller
{
    public function index(Request $request)
    {
        $on_page = $request->get('page', 1);

        $res = Http::get('https://reqres.in/api/users', [
            'page' => $on_page,
        ]);

        $data['users']     = $res->json()['data'];
        $data['max_pages'] = $res->json()['total_pages'];

        return view('index', $data);
    }

    public function detail($id)
    {
        $res = Http::get('https://reqres.in/api/users/' . $id);

        $data['user'] = $res->json()['data'];

        return view('detail', $data);
    }
}

Penjelasan

  • use Illuminate\Support\Facades\Http; : mengimpor HTTP client bawaan Laravel
  • Http::get($url, $params) : melakukan request GET, parameter kedua berupa query string (di sini page)
  • $res->json() : mengubah respons JSON jadi array PHP
  • $res->json()['data'] : mengambil bagian data dari respons
  • return view('index', $data); : mengirim data array ke view blade

Menambahkan header atau token

untuk API yang butuh autentikasi, tambahkan header lewat withHeaders:

$res = Http::withHeaders([
    'Accept' => 'application/json',
])->withToken($token)
  ->get('https://api.contoh.com/profile');

$data = $res->json();

Penjelasan

  • withToken($token) : shortcut untuk menambahkan header Authorization: Bearer <token>
  • withHeaders([...]) : menambahkan header custom

Menangani error

jangan langsung pakai hasil respons, cek dulu statusnya:

$res = Http::get('https://reqres.in/api/users');

if ($res->successful()) {
    $data = $res->json();
} else {
    // 4xx / 5xx
    abort($res->status(), 'Gagal memanggil API');
}

Penjelasan

  • $res->successful() : true kalau status 2xx
  • $res->failed() : true kalau status 4xx/5xx
  • $res->status() : kode status HTTP (200, 404, 500, dst)
  • ->throw() : bisa juga dipakai supaya request melempar exception otomatis kalau gagal

Menampilkan Data RESTful API di view Laravel

setelah data dipanggil di controller, kirim ke view blade:

{{-- resources/views/index.blade.php --}}
<table id="table_users">
  <tr>
    <th>ID</th>
    <th>EMAIL</th>
    <th>FIRST NAME</th>
    <th>LAST NAME</th>
    <th>FOTO</th>
    <th></th>
  </tr>
  @foreach ($users as $item)
  <tr>
    <td>{{ $item['id'] }}</td>
    <td>{{ $item['email'] }}</td>
    <td>{{ $item['first_name'] }}</td>
    <td>{{ $item['last_name'] }}</td>
    <td><img src="{{ $item['avatar'] }}" /></td>
    <td>
      <a href="{{ route('user_detail', ['id' => $item['id']]) }}">More Detail</a>
    </td>
  </tr>
  @endforeach
</table>

Penjelasan:

  • @foreach ($users as $item) : perulangan data array $users, tiap item dipindah ke $item
  • {{ $item['id'] }} : mencetak data array dengan key id, begitu juga email, first_name, last_name, dan avatar
  • route('user_detail', ['id' => $item['id']]) : memanggil route bernama user_detail sambil mengirim parameter id

Kesimpulan:

memanggil REST API di project Laravel sangat mudah dengan Http facade yang sudah dibungkus dari Guzzle. tinggal Http::get() atau Http::post(), ambil ->json(), dan data siap diolah di controller maupun view. untuk API yang butuh token, withToken() dan withHeaders() sudah menyediakan.

Pertanyaan yang Sering Diajukan

Bagaimana cara memanggil API di Laravel?

Gunakan Http facade bawaan Laravel: Http::get($url) untuk GET, Http::post($url, $data) untuk POST, lalu ambil respons dengan $response->json() untuk mengubah JSON jadi array PHP.

Apakah perlu install Guzzle untuk Http::get di Laravel?

Tidak. Http facade Laravel sudah dibungkus dari Guzzle dan tersedia secara default di Laravel 7 ke atas, jadi tinggal pakai tanpa install tambahan.

Cara menambahkan header atau token di request API Laravel?

Pakai withHeaders(): Http::withHeaders(["Authorization" => "Bearer " . $token])->get($url). Untuk token, pakai withToken($token).

Bagaimana menangani error saat request API gagal?

Periksa status dengan $response->successful(), $response->failed(), atau $response->status(). bisa juga lempar exception dengan ->throw() supaya error tertangkap.

Tutorial Video

Sigit Nurhanafi avatar
Full-stack developer & technical writer. Berpengalaman di PHP, Laravel, NodeJS, MySQL, dan Python. Aktif menulis tutorial pemrograman dan maintaining open-source projects di PemburuKode sejak 2021.