yet another blog about computer, technology, programming, and internet

Sunday, May 30, 2010

Bagaimana Saya Menjelaskan REST kepada Istri (How I Explained REST to My Wife)

Sunday, May 30, 2010 Posted by Ismail Habib , 13 comments
For the first time since this blog is created. I'm writing a post in two languages. I was impressed with an explanation from Ryan Tomayko which is based on his conversation with his non-techy wife about REST. You can read the original version here. Some people may think that the article is somewhat sexist. However, I do believe that he didn't do it on purpose ;) The rest of this post will be in Bahasa Indonesia.

--

Artikel di bawah ini adalah terjemahan dari artikel yang ditulis oleh Ryan Tomayko. Beberapa bagian tulisan di bawah ini mungkin tidak/kurang/belum akurat, namun akan saya coba untuk memperbaharuinya setiap kali saya menemukan kekurangan. Semoga bermanfaat.

Istri: Siapa itu Roy Fielding?

Ryan: Orang yang cerdas.

Istri: Oh, memangnya apa yang dia lakukan?

Ryan: Dia membantu menulis (mengkode) web server pertama dan melakukan banyak research untuk menjelaskan kenapa web bekerja seperti itu. Namanya ada di spesifikasi untuk protokol yang digunakan untuk menerima halaman web dari server ke browser.

Istri: Bagaimana cara kerjanya?

Ryan: Maksudnya, web?

Istri: Yup.

Ryan: Hmm. Semua itu sangat mengagumkan. Lucunya, orang tidak terlalu menghargai ini. Protokol yang sedang kubicarakan ini, HTTP, mampu melakukan banyak hal berguna yang diacuhkan orang dengan alasan-alasan tertentu.

Istri: Maksudnya HTTP seperti yang ada di awal teks yang aku ketik di browser?

Ryan: Ya. Itu menunjukkan browser tentang protokol apa yang digunakan. Yang kamu ketik itu adalah satu dari sekian terobosan penting dalam sejarah komputer.

Istri: Kok bisa?

Ryan: Karena itu mampu mendeskripsikan lokasi dari suatu hal dimanapun di dunia ini. Itu adalah fondasi dari web. Kamu bisa bayangkan itu seperti koordinat GPS untuk pengetahuan dan informasi.

Istri: Untuk halaman web?

Ryan: Tidak hanya untuk halaman web. Orang itu, Roy Fielding, dia banyak bercerita tentang apa yang ditunjukkan oleh HTTP dalam riset yang aku sebutkan tadi. Web dibangun dengan arsitektur "REST". REST memberikan definisi dari "resource" dimana "resource" ini ditunjuk oleh HTTP.

Istri: Halaman web itu sebuah resource?

Ryan: Kira-kira begitulah. Sebuah halaman web adalah representasi dari sebuah resource. Resource itu sendiri adalah sebuah konsep. URL-itulah yang diketikkan ke browser...

Istri: Aku tahu apa itu URL.

Ryan: Oh. URL dapat memberi tahu browser bahwa ada sebuah konsep di suatu tempat. Browser kemudian dapat menanyakan representasi spesifik dari konsep tersebut. Lebih spesifik lagi, browser tersebut bertanya tentang representasi halaman web dari konsep yang ada.

Istri: Apa ada jenis lain dari representasi?

Ryan: Sebetulnya, representasi adalah salah satu hal yang kurang termanfaatkan. Dalam banyak kasus, sebuah resource hanya memiliki satu representasi. Tapi kami berharap bahwa representasi akan digunakan lebih banyak di masa depan karena akan ada banyak format baru bermunculan.

Istri: Seperti apa?

Ryan: Hmm. Ada konsep yang disebut orang sebagai "Web Services". Itu bisa berarti macam-macam tapi konsep dasarnya ialah bahwa mesin juga dapat menggunakan web seperti manusia.

Istri: Maksudnya seperti robot begitu?

Ryan: Tidak, bukan begitu. Bukan maksudku bahwa robot akan duduk di kursi dan kemudian browsing halaman web. Tapi komputer dapat menggunakan protokol yang sama untuk mengirim message antar sesamanya. Kami sudah melakukan itu untuk waktu yang lama tapi tidak ada teknik yang dapat digunakan untuk berbicara dengan mesin di seluruh dunia pada saat ini.

Istri: Kenapa tidak?

Ryan: Karena mereka tidak didesain seperti itu. Ketika Fielding dan teman-temannya mulai membangun web, kemampuan untuk berkomunikasi antar mesin di seluruh dunia adalah perhatian utama mereka. Kebanyakan dari teknik yang digunakan untuk membuat komputer berkomunikasi dengan sesamanya tidak memiliki kebutuhan seperti itu. Kebanyakan hanya perlu untuk berkomunikasi dengan grup kecil saja.

Istri: Dan sekarang kamu perlu untuk berkomunikasi dengan semua mesin?

Ryan: Ya - bahkan lebih. Kami perlu untuk dapat berkomunikasi dengan semua mesin tentang semua hal yang ada di mesin-mesin tersebut. Jadi kamu membutuhkan sebuah cara untuk memungkinkan mesin berbagi informasi tentang resource yang mungkin belum ada pada mesin lain.

Istri: Apa?

Ryan: Misalkan kamu ngobrol dengan adikmu dan dia mau meminjam sapu atau apapun. Tapi kamu tidak punya - Ibumu yang punya. Jadi kamu bilang ke adikmu untuk meminjam dari Ibumu. Ini terjadi sepanjang waktu di dunia nyata dan ini juga akan terjadi ketika mesin mulai berkomunikasi satu sama lain.

Istri: Jadi bagaimana mesin memberitahu satu sama lain tentang lokasi hal-hal tersebut?

Ryan: URL, pastinya. Kalau semua yang dibutuhkan mesin memiliki URL, berarti kamu sudah menciptakan sebuah equivalen dari kata benda. Kesepakatan antara kamu, aku, dan seisi dunia tentang kata benda dalam suatu cara pastinya penting kan?

Istri: Ya.

Ryan: Mesin tidak punya kata benda yang universal - makanya mereka payah. Setiap bahasa pemrograman, database, atau sistem lain punya cara yang berbeda-beda dalam mengkomunikasikan benda. Itulah kenapa URL itu sangat penting. URL memungkinkan semua sistem ini berkomunikasi tentang benda masing-masing.

Istri: Tapi ketika aku melihat halaman web, aku nggak berpikir seperti itu.

Ryan: Orang lain juga tidak. Kecuali Fielding dan sedikit orang lain. Itulah kenapa mesin masih payah.

Istri: Bagaimana dengan kata kerja, kata ganti, dan kata sifat?

Ryan: Lucu juga kamu tanya itu karena itu adalah hal penting lain dari REST. Eng, setidaknya kata kerja lah.

Istri: Aku cuma bercanda.

Ryan: Itu lucu, tapi sebenarnya bukan joke sama sekali. Kata kerja itu penting. Ada konsep yang sangat kuat dalam pemrograman yang siebut sebagai "polymorphism" dalam Computer Science. Itu adalah cara kami mengatakan bahwa benda yang berbeda bisa memiliki kata kerja yang sama yang dikenakan pada mereka.

Istri: Aku tak mengerti.

Ryan: Wel... Kita lihat meja kopi. Kata benda apa saja yang ada? Gelas, baki, koran, remote. Sekarang, apa saja yang bisa kamu lakukan terhadap benda-benda itu?

Istri: Aku tak mengerti.

Ryan: Kamu bisa mengambil mereka, kan? Kamu bisa mengangkat mereka. Kamu bisa menjatuhkan mereka. Kamu bisa membakar mereka. Kamu bisa menggunakan kata kerja yang sama untuk objek manapun yang ada di sana.

Istri: Oke... jadi?

Ryan: Nah, itu yang penting. Bagaimana jika kita tidak bisa mengatakan, "ambil gelas", atau "ambil koran", atau "ambil remote"; Bagaimana jika untuk itu kita harus menggunakan kata kerja yang berbeda untuk setiap kata benda? Kita tidak bisa menggunakan kata "ambil" secara unversal, tapi harus menggunakan kata baru untuk setiap kombinasi kata kerja/kata benda.

Istri: Wow! Itu aneh.

Ryan: Ya, itu aneh. Otak kita cukup cerdas untuk mengetahui bahwa kata kerja yang sama dapat digunakan untuk benda-benda yang berbeda. Sebagian kata kerja memang lebih spesifik dan hanya bisa digunakan pada kata benda tertentu. Misalnya, aku tidak bisa "mengendarai gelas" atau "minum mobil". Tapi sebagian kata kerja sangat universal seperti ambil (GET), taruh (PUT), dan hapus (DELETE).

Istri: Kamu tidak bisa menghapus gelas.

Ryan: Oke, tapi kamu bisa membuang gelas. Tapi itu cuma joke kan?

Istri: Yeah.

Ryan: Jadi, HTTP -protokol yang dibuat Fielding dan teman-temannya ini- adalah tentang penggunaan kata kerja ke kata benda. Contohnya, ketika kamu mengunjungi sebuah halaman web, browser akan menggunakan HTTP GET ke URL yang kamu ketikkan dan halaman web akan kamu peroleh.

Halaman web biasanya mengandung gambar kan? Gambar adalah resource yang berbeda. Halaman web hanya menyebutkan URL ke gambar dan browser akan memanggil HTTP GET ke semua URL gambar tersebut hingga semua resource yang dibutuhkan untuk menampilkan halaman web itu diperoleh. Tapi yang penting disini ialah bahwa hal-hal yang berbeda dapat diperlakukan dengan cara yang sama. Apakah kata benda itu adalah gambar, teks, video, mp3, slideshow, atau apapun. Aku bisa melakukan instruksi GET untuk semua hal tersebut selama mereka memiliki URL.

Istri: Sepertinya GET itu kata kerja yang penting.

Ryan: Memang. Terutama bila kamu menggunakan browser karena browser biasanya hanya digunakan untuk mengambil sesuatu. Browser tidak terlalu banyak berinteraksi dengan resource. Ini jadi masalah karena orang jadi berpikir bahwa HTTP itu hanya untuk mengambil sesuatu. Padahal sebenarnya HTTP itu adalah protokol umum untuk mengaplikasikan kata kerja pada kata benda.

Istri: Keren. Tapi aku tidak paham kenapa ini bisa mengubah apapun. Kata benda dan kata kerja apa saja yang kamu mau?

Ryan: Kata benda sudah ada tapi tidak dalam format yang benar.

Coba bayangkan ketika kamu sedang browsing di amazon.com untuk mencari hadiah natal. Bayangkan setiap produk adalah kata benda. Sekarang, ketika mereka tersedia dalam bentuk yang dapat dimengerti mesin, kamu bisa melakukan banyak hal yang menarik.

Istri: Mengapa mesin tidak bisa mengeri halaman web biasa?

Ryan: Karena halaman web didesain untuk dimengerti oleh manusia. Mesin tidak peduli terhadap layout dan style. Mesin hanya butuh data. Idealnya, setiap URL punya representasi yang dapat dimenerti manusia dan representasi yang dapat dimengerti mesin. Ketika sebuah mesin melakukan GET terhadap resource, maka dia akan meminta representasi yang dapat dimengerti mesin. Ketika sebuah browser melakukan GET terhadap resource atas permintaan manusia, maka yang diperoleh adalah representasi yang dapat dimengerti oleh manusia.

Istri: Jadi semua orang harus membuat format yang dapat dimengerti oleh mesin ke semua halaman web mereka?

Ryan: Kalau itu memang bermanfaat.

Kita sudah banyak ngobrol dengan abstraksi. Bagaimana kalau ita ambil contoh yang nyata. Kamu adalah seorang guru -di sekolah aku yakin kamu punya sistem komputer yang besar, atau tiga atau empat komputer, yang memungkinkanmu untuk mengelola murid: di kelas mana mereka berada, berapa nilai mereka, kontak darurat, informasi mengenai buku yang kamu ajarkan, dan laib sebagainya. Jika sistem ini web-based, maka kemungkinan ada URL untuk setiap benda yang terlibat disini: murid, guru, kelas, buku, ruangan, dll. Saat ini, memasukkan URL lewat browser akan memberikanmu sebuah ahalaman web. Jika ada representasi yang dapat dimengerti oleh mesin untuk setiap URL, maka mudah saja untuk menelurkan sebuah aplikasi ke dalam sistem karena semua infomasi tersebut dapat dikonsumsi dengan cara yang standar. Itu juga akan memungkinan semua sistem untuk berkomunikasi satu sama lain dengan mudah. Atau, kamu bisa membuat sistem untuk propinsi atau negara yang bisa berkomunikasi dengan masing-masing sekolah untuk mengumpulkan nilai ujian. Kemungkinan yang ada bisa tanpa batas.

Setiap sistem akan memperoleh informasi dari yang lain dengan menggunakan instruksi HTTP GET yang sederhana. Jika sebuah sistem perlu menambahkan sesuatu ke sistem lain, maka dia akan menggunakan HTTP POST. Jika sebuah sistem ingin memutakhirkan sesuatu ke sistem lain, dia akan menggunakan HTTP PUT. Satu-satunya yang perlu didiskusikan adalah dalam bentuk apa data itu seharusnya.

Istri: Jadi ini yang kamu dan semua orang komputer lakukan sekarang? Mendiskusikan bagaimana data itu seharusnya?

Ryan: Sedihnya, tidak. Malah kebanyakan sibuk menulis spesifikasi kopleks untuk melakukan hal ini dengan cara yang berbeda dan tidak terlalu bermanfaat. Benda tidak universal dan kata kerja tidak polimorphic. Kita membuang puluhan tahun pengalaman dari penggunaan di dunia nyata dan teknik yang telah terbukti dan memulai kembali dengan sesuatu yang kelihatannya sangat mirip dengan sistem lain yang telah gagal di masa lalu. Kami menggunakan HTTP tapi hanya karena itu membantu kita untuk menghindari pembicaraan dengan administrator jaringan. Kami mengorbankan kemudahan dengan aplikasi yang terlihat keren dan aplikasi wizard.

Istri: Kenapa?

Ryan: Aku tidak tahu.

Istri: Kenapa kamu tidak bilang apa-apa?

Ryan: Mungkin nanti.

Friday, May 21, 2010