Kesuksesan web tidak lepas dari betapa solid-nya spesifikasi HTTP 1.1 (RFC-2145). HTTP cocok sekali untuk mengimplementasikan style REST. Belakangan ini Java dengan JSR-311 (JAX-RS) telah memiliki standar dalam implementasi REST, dan itu bagus sekali. Teknologi lainnya, Ruby on Rails sejak versi 1.2 telah mendukung REST (di sisi lain masih tetap mempertahankan SOAP), dan sejak versi 2.0 telah resmi "bercerai" dengan SOAP.
Seperti judulnya, pada posting kali ini kita akan membuat suatu service yang sangat sederhana, yaitu tentang televisi. Tentu saja layanan ini bersifat fiktif belaka dan tidak sepenuhnya memenuhi kriteria layanan world wide web. Namun disini kita hanya menekankan beberapa prinsip REST saja, yaitu Uniform Interface. Sebagaimana televisi konvensinal, maka:
1) Pengguna bisa menghidupkan TV
2) Pengguna bisa menyimpan channel TV ke dalam memory TV
3) Pengguna bisa mengubah channel TV untuk memilih siaran TV yang diinginkan
4) Pengguna bisa mengatur volume suara TV
5) Pengguna bisa mematikan TV
Dari daftar requirement di atas, maka kita bisa memodelkan resource TV, sbb:
1) /television/sessions
2) /television/channels
3) /television/volume
Kita memiliki tiga buah resources seperti disebutkan di atas. Jika anda termsuk orang yang teliti, mungkin anda akan bertanya: "Mengapa television dan volume adalah singular, sedangkan sessions dan channels adalah plural. Penulisan seperti ini hanyalah konvensi saja, television dan volume adalah singular karena kita asumsikan kita hanya memiliki satu buah television dan volume saja. Sedangkan kita asumsikan bahwa television memiliki banyak channels dan sessions, sehingga keduanya adalah plural.
Sekarang mari kita modelkan sistem kita untuk memenuhi requirement di atas:
1) Pengguna bisa menghidupkan TV
POST /television/sessions
2) Pengguna bisa menyimpan channel TV ke dalam memory TV
PUT /television/channels/{channel_number}
3) Pengguna bisa mengubah channel TV untuk memilih siaran TV yang diinginkan
GET /television/channels/{channel_number}
4) Pengguna bisa mengatur volume suara TV
PUT /television/volume
5) Pengguna bisa mematikan TV
DELETE /television/sessions/{session_id}
Mari kita bahas secara lebih mendalam lagi,
1) Pengguna bisa menghidupkan TV
Menghidupkan TV sama saja kita
menciptakan suatu sesi baru menonton TV. Mebuat sesi baru berarti kita melakukan POST terhadap suatu resource.
Sehingga POST /television/sessions
2) Pengguna bisa menyimpan channel siaran TV ke dalam memory TV
Pada umumnya dalam TV terdapat sejumlah alokasi memory yang digunakan untuk menyimpan channel TV. Biasanya siaran TV disimpan dalam nomor-nomor tertentu, misal 1 untuk RCTI, 2 untuk MetroTV, 3 untuk SCTV, dst. Pengguna tidak perlu menciptakan nomor-nomor tersebut, karena nomor-nomor tersebut adalah bawaan dari pabriknya. Namun pengguna dapat mengubah dan menyimpan channel TV sesuka hatinya, namun pengguna tidak dapat menciptakan maupun menghapus nomor memory tersebut, mereka hanya diperbolehkan mengganti isinya. Karena prinsip-nya adalah
mengubah atau update, maka kita melakukan PUT kepada suatu resource tertentu.
Sehingga PUT /television/channels/{channel_number}
3) Pengguna bisa mengubah channel TV untuk memilih siaran TV yang diinginkan
Ketika kita sedang asyik menoton TV, kadang kala kita ingin berpindah saluran. Karena TV kita telah dilengkapi memory yang dapat mengingat channel TV, kita dengan mudah memencet nomor yang ada pada tombol remote control untuk berpindah channel. Karena pada prinsipnya kita ingin
menonton siaran TV yang ada pada nomor tertentu, maka kita melakukan GET terhadap suatu resource tertentu.
Sehigga GET /television/channels/{channel_number}
4) Pengguna bisa mengatur volume suara TV
Hampir sama dengan no (2), mengatur volume TV pada dasarnya adalah
mengubah atau update terhadap volume TV. Kita hanya dapat mengubah, tidak dapat menghapus maupun menciptakan volume.
Sehingga PUT /television/volume
5) Pengguna bisa mematikan TV
Kebalikan dari no (1), untuk mematikan TV berarti kita mengakhiri suatu sesi. Dalam kasus ini, kata mengakhiri dapat didekatkan dengan kata
menghapus. Sehingga DELETE /television/sessions/{session_id}
Demikianlah contoh bagaimana memodelkan TV secara REST. Walaupun desain di atas tidak sepenuhnya RESTful karena kita menggunakan desain session yang tidak RESTful.
Further reading:
http://www.infoq.com/articles/webber-rest-workflow