Apa yang Dimaksud Stateless pada REST API
Salah satu syarat agar sebuah API dikatakan RESTful adalah stateless. Tapi kan tidak mungkin kalau sistemmu stateless dan tanpa data? Kebingungan ini sangat sering terjadi. Artikel ini mencoba untuk menghilangkan kebingunganmu tentang makna stateless sebagai syarat sebuah RESTful API.
Kesalahpahaman tentang Syarat Stateless
Memang benar salah satu syarat agar sebuah API dikatakan RESTful adalah memiliki sifat stateless. Namun, bukan berarti sistemmu tidak boleh memiliki data atau state sama sekali.
Baca juga: Apa itu Stateless dan Stateful Application
Yang dimaksud stateless pada syarat ini bukanlah sistemmu yang stateless melainkan komunikasi antara client dan serverlah yang harus stateless.
Mengutip dari pencetus arsitektur REST, mendefinisikan stateless sebagai:
“… komunikasi (antara client-server) haruslah stateless, …, sehingga setiap request dari client ke server harus berisi seluruh informasi yang dibutuhkan server untuk mengerti request tersebut, dan tidak memerlukan server untuk menyimpan konteks (mengenai aplikasi tersebut).”
Mari kita bahas perlahan.
Jenis State pada Arsitektur REST
Terdapat dua jenis state pada sebuah sistem REST yakni application state dan resource state. Arsitekur REST menempatkan kedua state ini di tempat yang berbeda.
Application state berada di client. Contoh application state ini adalah sedang di halaman mana website yang kamu buka. Istilah yang mungkin dekat artinya adalah sedang apa aplikasi saat ini.
Resource state berada di server. Contoh resource state adalah data profil kamu di Facebook, postingan di blog, dan lain-lain. State ini yang biasanya dikeluarkan sebagai response pada API kamu.
Pengertian Stateless pada REST
Stateless bukan berarti sistem tidak memiliki state atau data. Sebaliknya, sistem memiliki data yang terbagi menjadi dua tipe seperti di atas.
Yang dimaksud stateless pada arsitektur REST adalah server tidak boleh menyimpan sama sekali application state yang berada di client. Sehingga, setiap kali client meminta data kepada server, client harus mengirimkan application state-nya kepada server.
Karena setiap request mewajibkan client untuk mengirimkan application state, server tidak perlu mengetahui sama sekali apa yang terjadi pada client. Contohnya, server tidak perlu mengetahui di halaman mana client berada sebelumnya. Hal ini menyebabkan setiap request antara client dan server dapat berdiri sendiri. Komunikasi yang seperti ini yang didefinisikan sebagai stateless communication.
Server tidak memiliki menyimpan state yang berhubungan dengan application state. Disinilah, letak stateless dari arsitektur REST.
Contoh Kasus
Mari beranggapan kalau kita memiliki sistem perpustakaan. Dalam sistem ini, kita punya sebuah halaman yang menampilkan buku-buku yang dimiliki, diurutkan berdasarkan abjad.
Pengguna membuka daftar buku untuk abjad tertentu. Selain itu, pengguna juga dapat maju atau mundur satu abjad pada halaman daftar tersebut.
Contoh Komunikasi Tidak Stateless
Berikut ini adalah contoh yang tidak sesuai dengan pedoman REST.
Pada contoh ini, kamu punya dua jenis web API endpoint seperti ini:
/api/indeks/a/buku
/api/indeks/b/buku
...
Endpoint ini digunakan untuk mengambil buku dari indeks A (buku dengan judul awalan abjad A).
/api/indeks/selanjutnya/buku
/api/indeks/sebelumnya/buku
Endpoint ini khusus digunakan untuk mengambil buku-buku dari indeks selanjutnya dan sebelumnya. Contohnya jika kamu berada di indeks B maka indeks sebelumnya adalah A dan selanjutnya adalah C.
Kenapa endpoint-endpoint tersebut tidaklah menerapkan komunikasi yang stateless?
Agar endpoint selanjutnya
dan sebelumnya
dapat berjalan dengan baik. Server perlu mengetahui ada dimana client saat ini. Artinya perlu ada application state yang disimpan di server.
Contoh Komunikasi Stateless
Berikut ini adalah contoh penggunaan endpoint sesuai pedoman REST.
Pada contoh ini, hanya terdapat satu web API endpoint yakni yang digunakan untuk mengambil data buku pada indeks tertentu:
/api/indeks/a/buku
/api/indeks/b/buku
...
Sama dengan sebelumnya, endpoint ini digunakan untuk mengambil buku dari indeks A (buku dengan judul awalan abjad A).
Agar client bisa mendapatkan buku-buku di indeks selanjutnya dan sebelumnya, client sendirilah yang harus mengaturnya. Salah satu caranya adalah client membuat tombol selanjutnya dan sebelumnya yang memanggil endpoint berdasarkan abjad saat itu.
Pada kasus ini, server sama sekali tidak tahu dan tidak perlu tahu sedang dimana client. Tidak ada application state yang disimpan pada server pada kasus ini.
Keuntungan Stateless pada REST
Tentunya, dengan mengikuti pedoman stateless ini memiliki keuntungan, diantaranya:
-
Memudahkan untuk scaling API dengan cara menaruhnya di banyak server.
Karena tidak ada application state yang harus disimpan oleh server, tidak perlu adanya masalah inkonsistensi data. Untuk lebih lengkap mengenai ini cek artikel Stateless vs Stateful Application.
-
Server menjadi lebih simpel, tidak perlu logika kompleks untuk menangani application state.
-
Lebih mudah untuk melakukan caching.
Karena tidak adanya konteks khusus tentang client, suatu request yang sama dapat dilakukan oleh banyak client. Kasus tersebut sangat cocok jika menggunakan cache. Lebih lengkap mengenai caching dapat dibaca di artikel ini.
Bagikan di
Kolom Diskusi