cara
baru
berdasarkan
ketimbang sebuah
resource. Adalah sesuatu yang wajar bahwa sebuah resource mungkin saja memiliki
banyak nama (walupun
style REST yang bagus mengindikasikan bahwa ini
seharusnya dijaga sesedikit mungkin, jika memungkinkan).
Dengan cara yang sama, metoda-metoda HTTP diibaratkan sebagai
verb
karena menspesifikasikan sebuah aksi pada sebuah resource atau representasinya.
Tesis Fielding bersifat sangat umum; yang secara aktual dapat diaplikasikan pada
arsitektur berbasis jaringan apa saja. Walaupun begitu, penerapan paling
umum dari REST adalah pada World Wide Web dan HTTP. Mau tidak mau, hal ini
mengakibatkan konstrain dan
Sehingga, prinsip-prinsip yang akan dijelaskan nantinya merupakan subset dari REST
yang didefinisikan oleh Fielding tersebut.
beberapa tahun
ini
berhubungan dengan
DELETE dari HTTP. Dengan cara ini, seperangkat aksi telah distandardisasikan.
b. Nama seharusnya mengidentifikasi
Nama-
resource
POST /users/1
c.
Sebuah
resource dapat memiliki multi representasi, tetapi kesemuanya
harus
bisa diidentifikasi berasal dari resource yang sama (hal tersebut harus dapat
direfleksikan dari namanya).
Menurut Ediger(2008:149),
menyederhanakannya.
Dengan dua sudut dari segitiga REST tersebut mendapat perhatian, secara
potensial area abu-abu terbesar adalah mengidentifikasi dan menamai
resource.
Penamaan adalah salah satu area dimana kesederhanaan benar-benar dibayar mahal,
karena sangat mudah untuk menjadikannya keliru. Akan tetapi, jika kita benar-benar
mentaati pemakaian seperangkat verb standar dan tipe konten, maka hal itu akan
membantu konstrain pemilihan noun.
Inilah yang dimaksud oleh desainer dan arsitek sebagai konstrain yang
membebaskan. Prinsip-prinsip REST diturunkan dari pengamatan terhadap cara kerja
web dan jaringan hypertext lain secara aktual. Ketimbang menetapkan pembatasan
yang berubah-ubah, maka lebih baik membubuhkan cara bagaimana web seharusnya
beraksi.
Dengan bekerja menggunakan prinsip REST, maka setiap kesulitan yang dihadapi
dapat diperlakukan sebagai petunjuk bahwa kita telah melawan butir-butir pembentuk
arsitektur web yang alami. Tapi, sebenarnya masih memungkinkan bahwa kasus
tertentu yang dihadapi merupakan kasus spesial. Beberapa domain aplikasi ada yang
tidak cocok dengan paradigma REST. Tetapi, dengan mencoba menerapkan paradigma
REST akan memaksa seseorang untuk menolak kekecualian apapun dan kasus-kasus
spesial, dan dengan melakukannya maka akan terbukti kekecualian tersebut tidak
diperlukan lagi.
2.2.2.2 Ketahanan dari Perubahan
Keuntungan lainnya yang didapat dari desain RESTful adalah desain cenderung lebih
ulet terhadap perubahan daripada antarmuka bergaya RPC ( Remote Procedure Call ).
Desain RESTful membawa keputusan arsitektural ke dalam daerah
noun. Pemilihan
resource abstrak
dan representasinya.
2.2.2.3 Keseragaman
Salah satu keuntungan terbesar yang diberikan oleh
antarmuka yang seragam. Verb (metode HTTP) secara universal seragam, di seluruh
domain aplikasi. Tipe konten, walaupun tidak universal (akan berbeda di sepanjang
domain), sudah distandardisasi dan relatif terkenal.
Fakta bahwa pengembang dibatasi pada seperangkat kecil metode mungkin terlihat
memaksa, tetapi dalam prakteknya bukanlah hal yang terlalu menjadi perhatian. Apa
saja yang ingin dimodelkan dapat dengan mudah disusun dalam bentuk operasi CRUD.
Dengan cara berpikir seperti ini, membantu untuk mendorong kompleksitas yang
esensi ke dalam salah satu bagian arsitektur dimana mudah memperlakukannya.
Biasanya, ketika nampak diperlukan lebih dari metode dasar,
akan ada entiti resource lain yang tersembunyi di dalam model, yang menunggu untuk
diekstrak.
Tipe konten distandardisasi dengan cara yang berbeda. Tipe konten biasanya sesuatu
yang spesifik aplikasi, sehingga tidak akan ada gunanya bersifat universal. Meskipun
demikian, untuk memfasilitasi komunikasi, tipe konten biasanya bersifat
standar. Dalam dunia HTTP, ini diimplementasikan sebagai MIME (
Multipurpose
framework
untuk tipe konten. Seperangkat MIME type bersifat extensible, sehingga aplikasi baru
dapat mendefinisikan tipe lokal dan bahkan mendaftarkannya pada IANA manakala
telah meluas penggunaannya (Benson, 2008:103).
tersisa hanya tipe konten (yang secara wajar akan standar di dalam sebuah domain
aplikasi) dan noun.
disebut sebagai segitiga REST. Ketiganya, membentuk tiga sudut dari segitiga yang
mendefinisikan arsitektur. Sebuah desain yang berorientasi REST sering bisa
didekomposisikan dengan menentukan
sesuatu), memilih seperangkat
verb sudah
fix (tetap). Namun, setiap konstrain yang diletakkan pada ruang lingkup
verb
mengijinkannya untuk bersifat universal, verb apapun dapat diterapkan kepada setiap
noun.
HTTP mendefinisikan serangkaian metoda; yang bisa diperluas oleh protokol lain
seperti WebDAV, tetapi seperangkat dasar sudah cukup untuk REST. Empat metoda
yang paling umum adalah GET, PUT, DELETE dan POST.
Untuk menjelaskannya dapat dibuat beberapa analogi linguistik sebagai
simplifikasi dari empat metode umum. Ini akan menunjuk pada request body, dan
di sana menunjuk kepada URI dimana ia beraksi.
a.
b.
c.
d.
2.2.3.1.1
GET
hanya untuk mengakses resource secara read-only. Sejauh ini, GET adalah
verb
paling umum di Web dimana website statik sering hanya mempergunakan metode ini.
untuk update dapat menyebabkan banyak problem karena ia telah merusak asumsi
klien dan proxy-proxy yang dilewati terhadap sifat asli request GET.
2.2.3.1.2 PUT
Metoda PUT meng- update
body request PUT. Jika resource tidak ditemukan, request akan membuat resource
yang baru dengan representasi yang diberikan.
Sebuah hal umum yang membingungkan adalah bagaimana menentukan namanama resource (URI) apakah diterapkan pada request PUT atau POST. Request PUT
digunakan jika klien mengetahui URI dari resource, yang apabila tidak ada maka akan
dibuat resource yang baru sebagai mana yang sudah ditetapkan pada URI. Jika klien
tidak mengetahui URI dari
resource (contohnya, jika ia diambil dari ID yang
dibangkitkan secara otomatis oleh server), maka request POST yang seharusnya
digunakan.
resource
yang diidentifikasikan oleh URInya. Jika penghapusan ditolak oleh server yang tidak
Walaupun POST powerful, itu tidak seharusnya digunakan dimana GET, PUT, atau
DELETE sudah mencukupi. Semantik dari tiga metoda tersebut lebih sederhana,
dan konstrain-konstrain yang diletakkan padanya mengijinkan
caching yang
memudahkan dan skalabilitas. POST bisa, secara teori, di- cache menggunakan header
Cache-Control
dan Expires
POST utamanya digunakan dalam salah satu dari dua cara berikut, penciptaan objek
baru dan pemberian anotasi objek yang sudah ada. Pada kedua kasus tersebut,
URI dari POST adalah kontainer objek tersebut atau
parent-nya. RFC
penampungnya.
redirect via
header
Ketika memberikan anotasi sebuah resource, URI dari POST adalah resource
yang akan dianotasi ( parent dari entiti yang akan dikirim). Ini berbeda dari request
PUT, dimana resource yang di- POSTing tidak akan diupdate dengan representasi
yang baru, melainkan dianotasi dengan informasi tambahan.
2.2.3.2
Resource
resource adalah sesuatu dengan identitas. Dalam pemakaian yang populer digunakan,
istilah resource biasanya berarti sesuatu yang dapat dialamati jaringan pada internet.
Tetapi sebuah resource dapat berupa apa saja, baik itu nyata ataupun yang tidak dapat
diraba, asalkan dapat dinamai. Sebagaimana dijelaskan IETF RFC 2396 (dalam
Ediger, 2008:106):
Sebuah resource dapat berarti apa saja yang memiliki identitas. Contoh yang familiar
termasuk sebuah dokumen elektronik, sebuah gambar, service (contohnya, laporan
cuaca hari ini untuk Indonesia), dan koleksi dari resource lain. Tidak semua resource
bisa diambil via jaringan; contohnya, manusia, perusahaan, dan setumpuk buku di
dalam perpustakaan dapat juga dikatakan resource.
Tersembunyi di dalam definisi
resource
mempunyai state (resource bisa saja mempunyai state kosong pada kasus degenerasi,
tetapi ini jarang dijumpai). Salah satu dari konstrain yang menempatkan REST pada
interaksi dengan resource adalah bahwa setiap RESTful resource memiliki antarmuka
yang seragam. Tidak ada klien yang memiliki akses
ad-hoc (baca atau tulis) pada
sebuah resource menyangkut state resource , hal tersebut hanya diketahui oleh internal
resource. Setiap akses didapat dengan melalui transfer representasi dari state resource
via seperangkat metoda yang seragam (dalam hal ini, HTTP).
Salah satu rincian yang tidak terspesifikasikan oleh REST adalah bagaimana klien
meminta tipe konten tertentu. Dari banyaknya representasi yang mungkin tersedia dari
resource yang sama, bagaimana cara server mengetahui yang mana yang dikirim?
Dalam prakteknya, jawabannya adalah dengan menggunakan ekstensi URI atau
negosiasi konten. Ekstensi mudah dimengerti dan diimplementasikan: URI diuji
untuk ekstensi nama file seperti .js, .html , atau .xml. Lalu representasi yang paling
cocok kemudian dipilih berdasarkan pada
type map (struktur yang memetakan
ekstensi nama file ke tipe konten). Sebagai contoh, permintaan URI
orders/124.html
akan mengembalikan:
<Order id="124">
<Items>
<Item id="1" href="/orders/124/items/1">Office Chair,
Medium</Item>
<Item id="2" href="/orders/124/items/2">Ergonomic
Keyboard</Item>
</Items>
</Order>
Pengubahan tipe konten berdasarkan pada ekstensi URI adalah cara yang baik dan
mudah, dan ini berjalan baik seiring dengan cara kita memandang Web bekerja secara
tradisional. Selain itu, ini membuat URI terlihat seperti nama file, dan
bertindak layaknya filesystem path. Akan tetapi, ini tidak selalu optimal dalam model
REST.
Semua ini adalah jelas-jelas representasi yang berbeda dari
resource yang
sama, dan dengan URI yang berbeda. Banyak yang berpendapat bahwa URI
seharusnya hanya menamai
resource, dan tidak representasi. Tetapi bagaimana
mungkin menggunakan nama yang sama untuk mengacu pada semua representasi dari
resource ini?
Jawabannya adalah negosiasi konten. Ini adalah bagian dari
request dan
response HTTP dimana klien dan server bernegosiasi mengenai parameter yang
digunakan sehingga mereka dapat berkomunikasi.
Secara keseluruhan, negosiasi konten HTTP sangat fleksibel dimana ia dapat
menegosiasikan representasi berdasarkan bahasa (melalui
Language),
Accept).
digunakan.
Ketimbang menetapkan tipe konten secara eksplisit pada URI, maka lebih baik
menentukan header Accept pada request HTTP. Header ini berisi daftar tipe konten
yang diinginkan untuk diterima, yang prioritasnya dalam urutan menurun. Dengan
menggunakan negosiasi konten, request ini akan mengembalikan versi HTML:
GET /orders/124 HTTP/1.1
Host: www.example.com
Accept: text/html, application/xhtml+xml, text/*, image/png, image/*,
*/*
berbeda dari resource yang diminta, dan server akan berusaha memenuhi
dengan representasi yang dapat dilayaninya.
request
Web
Dahulu, URL beroperasi pada lapisan abstraksi yang disediakan oleh file system fisik
(file dan direktori), tetapi sekarang URL dioperasikan dalam satu lapisan abstraksi
baru yang ditambahkan di atas aplikasi dan digunakan sebagai ruang yang dapat
dialamati. Dahulu, walaupun kode aplikasi dan strukturnya berarti bagi pengembang,
tapi itu tidak berarti bagi pengguna. Sekarang dengan adanya lapisan abstraksi baru ini,
maka URL bisa terlihat cantik dan berarti bagi pengguna juga. Ini misalnya terdapat
pada Flickr, URL akan berbentuk seperti di bawah ini:
http://flickr.com/photos/deritaf
URL ini bisa dibandingkan dengan URL pada masa dahulu, misalnya URL
berikut ini yang menunjuk pada
merchandise Dr.Seuss dari situs Amazon pada
tanggal 2 Maret 2000 yang didapatkan dari Internet Archive:
http://s1.amazon.com/exec/varzea/search-handle-url/ref=gw_m_col_7/?
index=fixed-price%26rank=-price%26field-status=open%26field-browse=
68457%26field-titledesc%3DDr.%20Seuss .
a.
verb ( action
pemrograman Java dan C++. Struktur dari URL harus mengikuti pola-pola yang
mudah dibaca dan dimengerti. Pola-pola ini dituliskan dan dipaksakan sebagai
bagian dari aplikasi web.
c.
Kecuali konten statik, maka tidak terdapat hubungan antara URL dengan file di
web server. URL mengalamati lokasi dalam ruang-konsep, di
filesystem. Suatu
web request
diterima yang akan mengambil alamat konseptual ini dan memutuskan bagian
mana dari kode aplikasi yang akan digunakan untuk menjawab request tersebut.
dalam HTML adalah hanya karena itu merupakan tipe respon dari
request service
tersebut. Informasi yang direpresentasikan oleh halaman web tersebut dapat juga
direpresentasikan dengan baik dalam bentuk file teks, XML, RDF atau format lainnya
yang dipilih.
2.3.3 Routing
Routing memainkan peran kunci yang memungkinkan pengembangan web service ini
pada Rails.
dipasangkan/dicocokkan dengan suatu bagian tertentu dari kode, yang dalam hal ini
merupakan sebuah action pada controller yang akan merespon terhadap
request
tersebut. Pada proses ini, Rails akan melakukan
datang untuk dicocokkan dengan serangkaian route yang dispesifikasikan dalam file
config/routes.rb
di dalam project.
Ketika satu
mengecek apakah file-file statik pada direktori / public merupakan respon yang
diinginkan.
b.
diinterpretasikan sebagai lokasi file dalam
Jika path
public,
routing menggunakan
route pada file
yang dibuat pengembang untuk mendefinisikan
endpoint
URL dimana aplikasi web akan merespon. Setiap route merupakan pola yang
akan diisi. Route diperiksa dengan urutan kemunculannya pada file
routes.rb dimana yang pertama kali muncul yang cocok dengan path request
akan menjadi penentu bagaimana request yang datang tersebut ditangani.
aplikasi web dimulai dan merupakan langkah yang eksplisit harus dilakukan pada
pengembangan aplikasi Rails. Halaman web manapun harus memiliki sebuah URL
yang telah didefinisikan dengan sebuah
yang
yang
menyebabkan aplikasi web berjalan dan pola URL yang menyediakan akses terhadap
fungsionalitas tersebut.
user-friendly
Empat komponen ini, seperti dideskripsikan pada tabel di bawah ini, terlihat hampir
mirip dengan komponen-komponen pada pemanggilan metode tradisional, dengan
beberapa kekecualian. Fungsi pemanggil dapat meminta tipe pengembalian, dan sebuah
perintah HTTP diberikan bersamaan dengan metode pemanggilan sebagai potongan
data yang akan memandu eksekusi metode tersebut.
Tabel 2.2 Komponen pada Pemanggilan Web Service
Komponen
Disediakan Oleh
Tujuan
Controller dan Action Definisi route
Memilih sebuah kelas
controller data,
Format Respon
Header HTTP atau
definisi route (variabel
:0 format)
difikas
i data
action
yang
tersediaapus
data.
Parameter Request
Form data atau
parameter yang diencode pada URL
Perintah HTTP
Request HTTP
request yang
endpoint-endpoint,
dicocokkan dengan protokol HTTP dimana pada HTTP juga terdapat aktivitas yang
serupa dengan CRUD. Terdapat metode-metode standar HTTP, yang dalam hal ini
adalah GET, POST, PUT, DELETE yang akan dipetakan dengan action-action standar
dalam controller. Untuk memungkinkan routing seperti ini, maka perlu ditambahkan
sebaris kode map.resource :nama_resources pada file konfigurasi routes.rb.
Dengan adanya pernyataan seperti itu pada routes.rb, maka Router akan menangani
request HTTP yang datang untuk dipetakan/diarahkan pada resource yang sesuai. Ini
ditunjukkan pada tabel dibawah ini.
Tabel 2.3 Routing Setiap Metode HTTP dengan Action pada Controller