WHAT'S NEW?
Loading...

Mengenal Dasar Teknologi RESTful Web Service

Mengenal Dasar Teknologi RESTful Web Service

Saat ini, topik seperti cloud computing, serverless, stateless dan teknologi sumber data mutakhir lainnya sebagai penyalur data perangkat seluler seperti RESTful web service yang banyak digunakan sebagai penyalur data telah meninggalkan kesan bahwa REST (Representational State Transfer) merupakan teknologi baru, tapi faktanya REST ditemukan pada akhir abad ke 20.

Pada artikel ini saya akan menjelaskan sejarah singkat tentang REST (berdasarkan buku) dan mengulas sedikit bagaimana REST bekerja dalam protokol HTTP. Ada beberapa dasar acuan yang perlu diperhatikan ketika ingin mengubah sebuah aplikasi HTTP menjadi aplikasi RESTful service.

Di tahun 1999, ketika sebuah komentar definisi diajukan ke Internet Engineering Task Force (IETF: http://www.ietf.org) melalui RFC 2616: "Hypertext Transfer Protocol - HTTP/1.1." salah satu penulisnya, Roy Fielding yang mendefinisikan sebuah prinsip yang dibangun berdasarkan standar lingkungan HTTP dan URI yang kemudian melahirkan REST yang dikenal sekarang (disertasi lengkap mengenai informasi REST yang dibuat oleh Roy Fielding dapat dilihat melalui link publikasi berikut: http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm).

Seperti keterangan diatas, prinsip yang dibuat berdasarkan standar linkungan HTTP dan URI. Mari kita lihat dasar utama seputar standar HTTP dan URI, tetap berkaitan dengan cara mengubah sebuah aplikasi HTTP menjadi aplikasi RESTful service.

- resource adalah segalanya

Untuk memahami prinsip ini, kita harus memahami gagasan dari represenstasi adalah dengan format tertentu dan bukan berdasarkan file. Setiap data yang tersedia di internet memiliki sebuah format yang dapat dideskripsikan dengan content-type. Misalnya, text document; JPEG Images; MPEG videos; xml, html, text document; dan binary data yang semuanya adalah resource dengan jenis content-type berikut: image/jpeg, video/mpeg, text/html, text/xml, application/json dan application/octet-stream.

- setiap resource dapat diidentifikasi oleh unique identifier

Karena internet mengandung banyak resource berbeda, semua resource itu harus bisa diakses melalui URI dan harus diidentifikasi secara unik. Selanjutnya, URI bisa dalam format yang mudah dibaca manusia (sebagian orang memang mewajibkannya) terlepas dari kenyataan bahwa penggunanya adalah programmer dan bukan manusia pada umumnya (bukan berprofesi sebagai programmer).

URI menyimpan data secara self-descriptive dan memudahkan pengembangan lebih lanjut. Selain itu, menggunakan URI yang dapat dibaca manusia dapat membantu mengurasi resiko kesalah logis dalam program seminimalis mungkin. Berikut ini beberapa contoh URI:
- http://www.example.com/images/party/2017/newyear

- http://www.example.com/videos/party/2017/newyear

- http://www.example.com/data/documents/outcome?format-xml

- http://www.example.com/data/archives/2015
Pada URI diatas telah mengekspos berbagai jenis resource yang cukup jelas yaitu berupa images, videos, XML document dan binary archive document. Itulah contoh dari URI yang memang harusnya dapat dengan mudah dipahami manusia.

- menggunakan standar metode HTTP

Protokol asli HTTP (RFC2616) mendefinisikan 8 action atau dikenal dengan verb yaitu: GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE, CONNECT. Urutan 4 verbs awal terasa sudah dapat dikenali dalam konteks resource, terutama ketika mendefinisikan aksi manipulasi data resource yaitu CRUD. Jika secara relative dibandingkan dengan operasi CRUD database SQL, dengan cara yang sama saat menerapkan prinsip REST dengan tepat, HTTP verb dapat digambarkan seperti berikut:
Namun ada pengecualian dalam menggunakan verb. Seperti contoh POST yang digunakan untuk membuat resource. Tapi ketika resource harus dibuat berdasarkan URI tertentu, maka PUT adalah verb yang sesuai (menyisipkan tanggal kedalam bagian URI).
PUT /data/documents/outcome/13082017 HTTP/1.1

Content-Type: text/xml
Host: www.example.com


<?xml version="1.0" encoding="utf-8"?>
<outcome date="outcome">
<Item>Sample item</Item>
<price currency="IDR">3500000</price>
</outcome>

HTTP/1.1 201 Created
Content-Type: text/xml
Location: /data/documents/outcome/13082017

Bagaimanapun juga, dalam aplikasi yang kita punya, mungkin kita ingin menyerahkan ke aplikasi REST dalam menentukan lokasi untuk menempatkan resource yang baru dibuat dan dengan demikian membuatnya berada dilokasi yang sesuai namun masih belum diketahui ataupun tidak temukan.

Misalnya, kita contohkan kita ingin server membuat bagian tanggal pada URI berdasarkan tanggal sekarang. Dalam kasus seperti itu, sangat tepat untuk menggunakan verb POST ke resource utama URI dan membiarkan server merespon dengan lokasi resource yang baru dibuat (outcome date akan terisi otomatis).
POST /data/documents/outcome HTTP/1.1

Content-Type: text/xml
Host: www.example.com

<?xml version="1.0" encoding="utf-8"?>
<outcome date="13082017">
<Item>Sample item</Item>
<price currency="IDR">3500000</price>
</outcome>

HTTP/1.1 201 Created
Content-Type: text/xml
Location: /data/documents/outcome

- resource dapat memiliki banyak jenis representasi

Fitur kunci dari sebuah resource adalah resource dapat direpresentasikan dalam bentuk yang berbeda dari yang disimpan. Jadi resource dalam proses request dan posting bisa dalam berbagai macam jenis representasi, selama format yang ditentukan didukung. Pada contoh sebelumnya, kita telah membuat resource dengan representasi XML, tetapi jika server mendukung format JSON, proses dari representasi berikut tetap dapat diterima.
POST /data/documents/balance HTTP/1.1

Content-Type: application/json
Host: www.mydatastore.com

{
 "balance": {
  "date": ""22082014"",
  "Item": "Sample item",
  "price": {
   "-currency": "IDR",
   "#text": "3500000"
  }
 }
}

HTTP/1.1 201 Created
Content-Type: application/json
Location: /data/documents/balance

Dengan memahami dasar protokol HTTP dapat dengan mudah untuk mengerti cara kerja RESTful service. Jadi untuk itu sebagai pelengkap dalam memahami RESTful service bisa terlebih dahulu membaca cara kerja protokol HTTP yang kemudian merujuk pada HTTP verb yang disebutkan diatas.

Itulah sedikit penjelasan mengenai RESTful service, jika mungkin ada yang kurang jelas ataupun salah dalam penjelasan saya mohon kiranya berikan komentar pada kolom dibawah. Dan untuk artikel selanjutnya saya akan coba berikan contoh membuat RESTful service dengan NodeJS.

Image source: javabeat.

0 comments:

Post a Comment