Mengatur Request dengan Router Laravel

Muhammad Fajri
Monday, 05 April 2021

Bismillahirrahmanirrahim.

Dalam membuat sebuah request dilakukan melalui penggunaan protokol HTTP (Hypertext Transfer Protokol) yang diisikan dengan URL (Uniform Resouce Locator) yang merupakan jalur/path yang digunakan untuk mengakses sumber daya. Sumber daya yang diakses dapat berupa halaman, gambar, dan sumber daya yang lain. Sumber daya yang dikembalikan sebagai response dari request yang dikirimkan dapat berupa halaman, gambar atau file dalam format JSON atau XML dan yang lainnya.

Dalam penanganan request terdapat beberapa HTTP Verbs yang digunakan seperti GET, POST, PATCH, PUT, dan DELETE.

Perbedaannya:

  • GET, mengambil data dari server.
  • POST, menambah data baru dan menyimpannya di server.
  • PATCH dan PUT, untuk mengubah data.
  • DELETE untuk menghapus data.

Masih ada HTTP Verbs yang lain kaitannya dengan request namun verb-verb ini sudah cukup untuk bisa mempraktikkan penggunaan routers.

Daftarkan Router

Pada folder routes terdapat file web.php yang dapat digunakan untuk mendaftarkan seluruh route atau jalur yang digunakan dalam aplikasi yang dibangun.

Buka file tersebut dan hapus semua isi filenya kecuali tag pembuka PHP. Kemudian isikan seperti di bawah ini.

<?php

Route::get('/', function () {
    return "Respon yang diterima di path / untuk method GET";
});

Route::get('/students', function () {
    return "Menampilkan seluruh daftar data mahasiswa";
});

Route::post('/students', function () {
    return "Menambah data mahasiswa baru";
});

Route::put('/students', function () {
    return "Melakukan perubahan data pada mahasiswa";
});

Route::delete('/students', function () {
    return "Menghapus data mahasiswa";
});

Bagian yang harus diperhatikan:

  • Route, kelas Router yang digunakan untuk mendaftarkan router pada aplikasi.
  • ::get, static method yang akan menentukan HTTP Verbs apa yang akan digunakan. Method yang lain seperti ::post, ::put, dan ::delete.
  • /, path yang akan dieksekusi oleh program saat mendapatkan response.
  • function () {...}, closure function yang bersifat anonim, akan dieksekusi ketika terdapat request yang memiliki kesamaan path dengan router yang didaftarkan.

Untuk melihat perubahan yang dilakukan, jalankan php artisan serve terlebih dahulu lalu akses browser dan arahkan ke localhost dengan port 8000.

Berikut tampilan pada router /.

Router Test

Dan ini untuk path /students.

Router Test 2

Saat menjalankan request ke server melalui browser, hanya HTTP Verbs GET saja yang bisa digunakan. Saat mengakses path /students pada URL Bar secara otomatis hanya method GET yang dapat dilakukan. Agar dapat melakukan request dengan HTTP Verbs yang lain dapat diakses menggunakan Postman.

Silahkan buka aplikasi Postman dan jalankan request dengan path /students menggunakan method POST. Dapat dilihat bahwa request yang dilakukan mengembalikan error seperti berikut.

Postman Request

HTTP error yang ditampilkan menunjukkan kode 419 Page Expired ini disebabkan oleh aplikasi Laravel yang tidak menyertakan CSRF Token pada request. CSRF Token merupakan string acak yang digunakan untuk mengamankan aplikasi dari serangan yang bertipe CSRF.

CSRF Token harus disertakan pada aplikasi Laravel jika ingin melakukan request selain metode GET. CSRF Token ini di-generate oleh view secara otomatis.

Men-disable CSRF Token tidak disarankan karena akan membahayakan aplikasi yang dibuat. Ini hanya untuk memudahkan proses dalam melakukan pengetesan request melalui aplikasi Postman.

Untuk men-disable CSRF Token pada Laravel, jadikan komentar VerifyCsrfToken middleware pada file app\Http\Kernel.php seperti di bawah ini.

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{

    ...

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            //\App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];
    ...
}

Setelah selesai, lakukan request kembali pada aplikasi Postman dan seharusnya error tidak ditampilkan lagi.

Postman Request2

Path Parameter pada Router

Pada pendaftaran router, kita bisa menyertakan parameter melalui path. Hal ini akan sangat berguna saat ingin mengakses data tertentu pada server. Contoh penggunaannya adalah ketika ingin mengakses data yaitu menggunakan id. Misalnya, ketika ingin mengakses data mahasiswa dengan id 1 maka pada path akan menjadi /students/1.

Untuk implementasinya, dapat dilihat pada kode program berikut. Ubah isi file routes\web.php.

<?php

use Illuminate\Http\Request;

Route::get('/', function () {
    return "Respon yang diterima di path / untuk method GET";
});

Route::get('/students', function (Request $request) {
    return "Menampilkan seluruh daftar data mahasiswa";
});

Route::post('/students', function () {
    return "Menambah data mahasiswa baru";
});

Route::get('/students/{id}', function ($id) {
    return "Mengambil data mahasiswa dengan id=".$id;
});

Route::put('/students/{id}', function ($id) {
    return "Melakukan perubahan data pada mahasiswa dengan id=".$id;
});

Route::delete('/students/{id}', function ($id) {
    return "Menghapus data mahasiswa dengan id=".$id;
});<?php

use Illuminate\Http\Request;

Route::get('/', function () {
    return "Respon yang diterima di path / untuk method GET";
});

Route::get('/students', function (Request $request) {
    return "Menampilkan seluruh daftar data mahasiswa";
});

Route::post('/students', function () {
    return "Menambah data mahasiswa baru";
});

Route::get('/students/{id}', function ($id) {
    return "Mengambil data mahasiswa dengan id=".$id;
});

Route::put('/students/{id}', function ($id) {
    return "Melakukan perubahan data pada mahasiswa dengan id=".$id;
});

Route::delete('/students/{id}', function ($id) {
    return "Menghapus data mahasiswa dengan id=".$id;
});

Keterangan baris kode:

  • /students/{id}, path yang memuat satu id.
  • function({$id}), closure method yang akan dijalankan ketika path /students/{id} dipanggil. Penamaan variabel di sini bebas/tidak dibatasi namun disarankan untuk memberikan penamaan yang jelas dan mudah dipahami.

Query Parameter pada Router

Penerapan Query Parameter tidak perlu didefinisikan pada router. Kita hanya perlu menambahkan query pada bagian akhir URL yang dikirimkan. Seperti:

localhost:8000/students?id=1

?id=1 merupakan query parameter yang dikirimkan. id merupakan nama variabel yang diberikan dan 1 merupakan nilai variabel tersebut.

Dalam melakukan request dapat digunakan beberapa query parameter seperti:

localhost:8000/students?id=1&nama=AhmadYani&nim=20212305

Pada URL ini terdapat tiga parameter yang dikirimkan dengan masing-masing nilainya. Setiap parameter dipisahkan dengan simbol ampersand (&).

Untuk mengakses parameter yang sudah dikirimkan, kita lihat kembali router dengan path /students dengan method GET.

Route::get('/students', function (Request $request) {
    return "Menampilkan seluruh daftar data mahasiswa";
});
  • /students, merupakan path-nya.
  • function(Request $request), merupakan closure method yang menerima satu parameter $request yang merupakan instansiasi class Request. Untuk itu harus ditambahkan class Request pada file web.php yaitu dengan menambahkan baris use Illuminate\Http\Request; setelah tag pembuka PHP.
  • Untuk dapat mengakses parameter yang dikirimkan, digunakan object operator yaitu ->. Jadi, untuk mengakses parameter id yaitu $request->id.

Referensi