Kepanjangan REST

REST –> REpresentational State Transfer

Apakah itu ?

REST adalah jenis arsitektur untuk komunikasi antar sistem dan sumberdaya yang ada di web.

Hmm..pengertiannya terlalu umum. Sebenarnya dalam kenyataannya REST itu seperti apa ?

Okay, coba kita detailkan.

Pendahuluan dan Sejarah

Dunia web merupakan penyedia sumberdaya media di Internet yang terbanyak. Halaman web, video, gambar, aplikasi, suara, dll dengan mudah kita dapatkan di Internet. Dengan cuma mengetikkan http://www.xxxx.xxx di browser, maka kita akan mendapatkan data-data tersebut. Atau dengan mengakses ftp://ftpdomain.xxx , maka kita bisa mendapatkan dokumen yang kita mau.

Kalau kita mau video, misalnya kita masuk ke www.youtube.com.
Kalau kita mau berita berupa teks, kita misalnya masuk ke www.detik.com atau www.kompas.com.
Kalau kita mau dokumen dari sebuah folder di web, maka bisa masuk ke ftp://ftpxx.xxx dsb.
Begitu juga kalau kita ingin mendapatkan lagu yang kita inginkan, banyak sumber daya di web yang tersedia.

Tetapi ada permasalahan dasar di waktu awal antara browser/client dengan server yang mempunyai sumber daya tersebut.

Permasalahan Dalam hal apa ?

Dalam hal representasi, standar komunikasi, cara mengaksesnya, dan menentukan status dari sumberdaya tersebut.

Sebelum dibuat standar REST ini atau bahkan sebelum teknologi web ditemukan, maka representasi dari sumber daya adalah dalam bentuk byte-byte, binary, stream, text, dll yang harus dilakukan proses transfer data, encoding dan decoding tergantung dari kesepakatan dari 2 sistem yang berkomunikasi..

Bagaimana data dahulu dikirim antar 2 komputer ?

Video, gambar, data aplikasi dll dikirimkan dalam bentuk byte-byte yang disisi penerima/client akan dianalisa dulu, dibaca dulu metadata dari file tersebut dari byte-byte yang ada. Apakah dibuat dengan bahasa pemrograman / encoding apa, tipenya apa, dll, barulah nanti diterjemahkan menjadi file yang serupa di sisi client. Hal ini diperumit dengan berbagai macam sistem operasi, hardware, bahasa pemrograman yang berbeda diantara 2 sistem yang berkomunikasi didalam komunikasi antar 2 komputer/sistem.

Oleh karenanya muncul masalah interoperability/kemudahan integrasi, yang menghasilkan solusi dengan cara proses transfernya menggunakan level lebih rendah di urutan network stack. Binary file ditransfer di level network menggunakan protokol TCP/UDP, yang tentunya akan membutuhkan banyak proses low level lainnya juga didalamnya.

Untuk menangani masalah ini, muncul protokol RPC (Remote Procedure Call) diatas protocol TCP/UDP yang memungkinkan melakukan eksekusi procedure secara jarak jauh/remote. Salah satunya misalnya menggunakan library socket. Gambar yang kita akses melalui browser kita bisa saja dikirimkan dalam bentuk binary, ditransfer melalui protocol TCP / UDP menggunakan library socket, diencode atau diterjemahkan menjadi file berdasarkan metadatanya. Antara client dan server harus saling terikat secara network dan statefull agar bisa mendapatkan sumberdaya yang diinginkan.

Begitu banyak komputer dan browser yang mengakses sumberdaya di banyak komputer dan sistem yang terhubung. Akan sangat merepotkan dari sisi IT development ketika harus melakukan pengecekan dan melakukan low level coding ketika ingin mengakses begitu banyak sumber daya tersebut.

Solusi yang diinginkan adalah adanya arsitektur yang bisa membuat banyak sistem bisa saling berkomunikasi di level aplikasi, dan bukan di level jaringan/network lagi yang membutuhkan low level code.

Hal ini disebut juga sebagai permasalahan Distribution Object . Yaitu bagaimana sebuah objek atau sumberdaya bisa diakses dari banyak sistem yang terhubung dengan cara yang lebih mudah.

Lalu apa yang menjadi solusi dari permasalahan diatas ?

Dari kasus ini akhirnya semua orang ingin bagaimana agar representasi sumberdaya tersebut dalam bentuk video, teks, suara, dll, dapat diakses secara seragam dan mudah, dan memprosesnya cukup di level lebih atas di network stack. Bagaimana misalnya sebuah data dan sumberdaya yang dibuat dalam bahasa pemrograman Java, bisa diakses oleh client yang memakai bahasa C.

Akhirnya ditemukan beberapa cara , diantaranya pada tahun 1991, muncul pendekatan menggunakan CORBA (Common Object Request Broker Architecture). Konsep CORBA ini berupaya memisahkan proses yang ada di client dengan proses yang jalan di server. Ditengah-tengahnya ada proxy yang bertindak sebagai perantara.

Lalu muncul lagi SOAP (Simple Object Access Protocol) , yang membuat protokol pertukaran objek dengan standard XML sebagai antarmuka.

Ada lagi dari Microsoft memperkenalkan DCOM (Distributed Component Object Model) yang hanya bertahan dan jalan di sistem operasi Windows saja.

Java dengan slogannya “Write once, run anywhere” juga berusaha membuat standard memakai EJB (Enterprise Java Bean) untuk kasus yang sama.

Tetapi semua cara diatas tidak bertahan lama, karena :

  • Spesifikasi yang rumit
  • Standar yang berubah-ubah.
  • Standar yang terlalu dekat dengan implementasi, bukan standard abstraksi / arsitektural
  • Banyaknya code yang dibuat untuk cuma kasus sederhana.
  • Tidak benar-benar independence dengan banyak library atau sistem yang berbeda, karena terlalu terikat dengan implementasi.

Lalu apa hubungannya dengan web dan REST ?

Dengan berkembangnya teknologi web, http, html dan yang berkaitan dengannya, maka permasalahan yang sama juga terjadi di dunia web.

Web yang terdiri dari media text, gambar, suara, dll, juga membutuhkan cara akses, representasi, dan juga antarmuka yang mudah untuk mengaksesnya. Berkembangnya web dan penggunaan yang banyak untuk web, menjadikan permasalahan ini lebih menarik perhatian para ahli IT.

Kasus Distribution Object di dunia client-server sekarang menjadi kasus Distribution Hypermedia Object. Karena di web , dokumen-dokumen tersebut dianggap sebagai HyperMedia

Lalu pada tahun 2000 muncullah disertasi dari Roy Thomas Fielding mengenai Architectural Styles and the Design of Network-based Software Architectures yang didalamnya menceritakan konsep REST dan perjalanannya dalam menggunakan arsitektur REST untuk web semenjak tahun 1994 bersama dengan protokol HTTP.

Konsep Arsitektural REST ini mencoba menyelesaikan masalah untuk pemroresan Distribution Hypermedia Object

Detilnya kita bahas di artikel selanjutnya …