7 BAB II LANDASAN TEORI Bab ini menguraikan tentang teori

advertisement
7
BAB II
LANDASAN TEORI
Bab ini menguraikan tentang teori-teori dasar yang berkaitan dengan
pembuatan layanan berbasis web dengan JSON-RPC pada platform Java dan
PHP, yang akan dijadikan sebagai landasan teori dalam penelitian ini. Beberapa
teori dasar akan dibahas di bab ini, antara lain teori dasar tentang layanan berbasis
web, JSON, JSON-RPC, Java, PHP, JavaScript, dll.
2.1
LAYANAN BERBASIS WEB (WEB SERVICE)
Layanan berbasis web merupakan suatu teknologi yang bertujuan
memudahkan komunikasi antar aplikasi, yang menggunakan standar yang tidak
terikat platform dan juga tidak terikat dengan bahasa pemrograman yang
digunakan oleh masing masing aplikasi.
Definisi W3C (2011) :
“A software sistem designed to support interoperable machine-to-machine
interaction over a network. It has an interface described in a machineprocessable format (specifically web services Description Language WSDL).
Other sistems interact with the web service in a manner prescribed by its
description using SOAP messages, typically conveyed using HTTP with an XML
serialization in conjunction with other Web-related standards."
(Suatu sistem perangkat lunak yang dirancang untuk mendukung interaksi mesin
ke mesin pada suatu jaringan dengan lintas platform. Layanan berbasis web ini
mempunyai sebuah penghubung yang diuraikan dalam suatu format yang dapat
diproses oleh mesin seperti WSDL. Sistem lain yang berinteraksi dengan layanan
berbasis web ini dilakukan melalui suatu penghubung menggunakan pesan seperti
pada SOAP. Pada umumnya pesan ini dilakukan melalui HTTP dan XML yang
merupakan salah satu standar web).
8
Seiring dengan perkembangan teknologi, format pertukaran data yang
dapat digunakan dalam pembuatan sebuah layanan berbasis web tidak sebatas
hanya XML saja, kita dapat juga menggunakan format pertukaran data lainnya
misalnya JSON.
2.2
JSON
JSON adalah suatu format pertukaran data yang memiliki karakteristik
yang ringan, mudah dimengerti oleh manusia, serta memiliki kemudahan
diterjemahkan oleh komputer.
JSON dibuat berdasarkan bagian dari bahasa
pemprograman JavaScript.
Format JSON sendiri merupakan teks yang tidak bergantung terhadap
bahasa pemprograman apapun, hal ini disebabkan karena gaya bahasa yang
digunakan adalah gaya bahasa yang umum digunakan oleh pemrogram untuk
bahasa pemrograman keluarga C termasuk didalamnya C, C++, C#, Java,
JavaScript, Perl, Python dll. Sifat-sifat tersebut menjadikan JSON sangat ideal
untuk digunakan sebagai format pertukaran data.
2.2.1 Struktur JSON
Format JSON terdiri dari dua buah struktur, yaitu :
1. Sekumpulan pasangan nama/nilai
Pada beberapa bahasa pemrograman tertentu, hal ini dinyatakan sebagai
objek (object), rekaman (record), struktur (struct), kamus (dictionary),
tabel hash (hash table), dan daftar berkunci (keyed list).
2. Daftar nilai terurutkan
Untuk kebanyakan bahasa, hal ini dinyatakan sebagai larik (array), vektor
(vector), daftar (list), atau urutan (sequence).
2.2.2 Bentuk JSON
JSON menggunakan bentuk sebagai berikut :
9
1. Objek(Object)
Merupakan sepasang nama/nilai yang tidak terurutkan. Penulisan objek
dimulai dengan karakter “{“ (kurung kurawal buka) dan diakhiri dengan
karakter “}” (kurung kurawal tutup). Setiap nama selalu diikuti dengan
karakter “:” (titik dua), dan setiap pasangan nama/nilai dipisahkan oleh
karakter “,” (koma)
Gambar 2.1 Objek JSON / JSON Object
2. Larik(Array)
Larik adalah kumpulan nilai yang terurutkan. Larik selalu dimulai dengan
karakter “[“ (kurung kotak buka) dan diakhiri dengan karakter “]” (kurung
kotak tutup). Setiap nilai dipisahkan oleh karakter “,” (koma).
Gambar 2.2 Larik JSON / JSON Array
2.2.3 Istilah Dalam JSON
Berikut penjelasan istilah yang digunakan pada sub-bab 2.2.1 dan 2.2.2 :
1. Nilai (value)
Merupakan sebuah string dalam tanda kutip ganda, angka, true /false ,
null, sebuah objek atau sebuah larik. Struktur-struktur tersebut dapat
disusun bertingkat, seperti berikut :
10
Gambar 2.3 Nilai JSON /JSON Value
2. String
Merupakan kumpulan dari nol atau lebih karakter yang dibungkus dengan
tanda kutip ganda. Di dalam string dapat digunakan karakter "\" untuk
membentuk karakter khusus. Sebuah karakter mewakili karakter tunggal
pada string. String sangat mirip dengan string C atau Java.
Gambar 2.4 JSON String
3. Angka
Sangat mirip dengan angka di C atau Java, kecuali format oktal dan
heksadesimal tidak digunakan.
11
Gambar 2.5 Angka JSON/JSON Number
4. Spasi kosong
Dapat disisipkan di antara pasangan tanda-tanda tersebut, kecuali beberapa
detil yang secara lengkap dipaparkan oleh bahasa pemprograman yang
bersangkutan.
2.3
RPC
RPC merupakan salah satu protokol yang cukup sederhana yang banyak
digunakan saat ini untuk membangun suatu layanan berbasis web.
Definisi RPC menurut Dave Marshall (1999) :
“RPC is a powerful technique for constructing distributed, client-server based
applications. It is based on extending the notion of conventional, or local
procedure calling, so that the called procedure need not exist in the same address
space as the calling procedure. The two processes may be on the same sistem, or
they may be on different sistems with a network connecting them”
(RPC merupakan suatu teknik untuk membangun aplikasi berbasis client-server
terdistribusi. RPC dibuat berdasarkan pada konsep pemanggilan sub-rutin lokal,
sehingga sub-rutin yang akan dipanggil tidak harus berada pada sistem yang
sama. Dua buah pemrosesan bisa jadi berada pada sistem yang sama , atau bisa
juga berada pada sistem yang berbeda yang dihubungkan melalui sebuah
jaringan).
12
RPC memungkinkan kita untuk mengakses sebuah sub-rutin yang berada
pada aplikasi lain meskipun aplikasi tersebut berada pada sistem dan pada mesin
yang berbeda. Untuk dapat melakukan ini sebuah aplikasi di server harus
menyediakan sekumpulan sub-rutin yang dapat diakses oleh aplikasi client.
Pendekatan yang dapat dilakuan adalah sebuah server membuka soket, lalu server
akan menunggu client yang memanggil sub-rutin yang disediakan oleh server.
Protokol RPC menggunakan suatu format data tertentu untuk pertukaran
datanya, format data yang banyak di gunakan adalah menggunakan teknologi
XML, protokol dengan XML ini biasanya dinamakan dengan XML-RPC. Namun
seiring perkembangan teknologi , ditemukan sebuah format pertukaran data baru
yaitu JSON , yang mempunyai kelebihan dibandingkan XML , antara lain sifat
dari JSON yang ringan , mudah dibaca oleh manusia, mudah ditulis oleh manusia,
dan juga ukurannya yang kecil , sehingga byte yang dihasilkannya pun akan lebih
kecil daripada XML. Hal ini tentu berguna untuk pemrosesan datanya nanti, yang
akan lebih cepat dibandingkan XML. Protokol RPC yang menggunakan JSON
sebagai format pertukaran datanya disebut dengan JSON-RPC.
2.4
JSON-RPC
Konsep dasar dari JSON-RPC itu sendiri sangat sederhana, yaitu sebuah
mekanisme umum yang terdiri dari dua buah sistem yang terhubung melalui
sebuah koneksi data. Selama koneksi tersebut tetap ada, suatu sistem dapat
melakukan pemangilan terhadap suatu sub-rutin yang terdapat pada sistem lain.
Untuk melakukan pemanggilan jarak jauh terhadap suatu sub-rutin, maka
sebuah objek permintaan ataupun objek notifikasi akan di kirimkan oleh client
terhadap server, kemudian server akan memberikan hasil pemrosesannya berupa
objek balasan terhadap objek permintaan tersebut, kecuali jika yang di kirimkan
oleh client adalah berupa objek notifikasi , maka server tidak akan memberikan
objek balasan sebagai balasan terhadap client.
2.4.1 Spesifikasi JSON-RPC
13
Berikut ini adalah spesifikasi resmi dari JSON-RPC 2.0 yang merupakan
versi terakhir dari teknologi JSON-RPC ketika tulisan ini dibuat.
2.4.1.1 Objek permintaan (request object)
Untuk memanggil sebuah sub-rutin di server penyedia layanan berbasis
web, maka sebuah pemintaan dilakukan oleh client tehadap server penyedia
layanan berbasis web yang menyediakan sub-rutin tersebut. Permintaan tersebut
diimplementasikan dalam bentuk sebuah objek permintaan, yang berupa sebuah
objek tunggal yang disandikan dalam format JSON. Sebuah objek permintaan
memiliki tiga buah atribut, yaitu :
1. Jsonrpc
Atribut ini adalah atribut dengan tipe string untuk menandakan versi dari
protokol JSON-RPC. Dalam JSON-RPC 2.0 , atribut ini harus selalu di set
dengan nilai “2.0“.
2. Method
Atribut ini adalah atribut dengan tipe string yang berisi nama dari subrutin yang akan di panggil
3. Params
Atribut ini merupakan sebuah variabel larik yang berisi sekumpulan objek
untuk memetakan argumen terhadap suatu sub-rutin
4. Id
Atribut ini sebuah identitas tehadap suatu objek permintaan, tipe nya bisa
apa saja. Identitas ini berguna untuk memetakan antara objek balasan dan
objek permintaan yang akan dikirimkan.
Sebuah objek permintaan memiliki format dalam bentuk JSON, format
nya adalah sebagai berikut :
1. Pemanggilan sub-rutin dengan posisi parameter
Format : {"jsonrpc": "2.0", "method": [nama sub-rutin], "params":
[parameter 1, parameter 2, dst], "id": [Identitas dari objek
permintaan]}
14
Contoh : {"jsonrpc": "2.0", "method": "daftarFilm", "params":
[“horror”,”barat”], "id": “A1”}
2. Pemanggilan sub-rutin dengan nama parameter
Format : {"jsonrpc": "2.0", "method": [nama sub-rutin], "params":
{“nama parameter”:parameter 1, dst}, "id": [Identitas dari objek
permintaan]}
Contoh : {"jsonrpc": "2.0", "method": "daftarFilm", "params":
{“kategori_film”:“horror”,”jenis_film””barat”], "id":” A1”}
2.4.1.2 Objek notifikasi (notification object)
Objek notifikasi
adalah sebuah objek permintaan khusus yang tidak
memerlukan nilai balikan berupa objek balasan dari server. Objek ini merupakan
sebuah objek tunggal yang disandikan dalam bentuk JSON. Atribut yang dimiliki
sama persis dengan objek permintaan, tetapi dengan beberapa pengecualian yaitu
atribut “Id” harus selalu di set null, hal ini karena server tidak akan memberikan
objek balasan pada setiap objek notifikasi yang dikirimkan .
Objek notifikasi dikirimkan ketika client akan melakukan pemanggilan
terhadap sub-rutin, tetapi client tidak memerlukan objek balikan. Penggunaan
object notifikasi ini memiliki kelemahan , yaitu client tidak akan pernah tahu jika
terjadi kesalahan dan munculnya kesalahan ketika proses pemanggilan terhadap
sub-rutin.
Format penulisannya adalah sebagai berikut :
Format :
{"jsonrpc": "2.0", "method": [nama sub-rutin], "params":
[parameter 1, parameter 2, dst]}
Contoh
:
{"jsonrpc":
"2.0",
"method":
"daftarFilm",
"params":
[“horror”,”barat”]}
2.4.1.3 objek balasan (response object)
Ketika suatu pemrosesan terhadap suatu sub-rutin selesai dilakukan ,
penyedia layanan berbasis web harus memberitahu client dengan mengirimkan
15
sebuah objek balasan, berupa sebuah objek tunggal yang disandikan dalam format
JSON, yang memiliki tiga buah atribut yaitu :
1.
Jsonrpc
Atribut ini adalah atribut dengan tipe string untuk menandakan versi dari
protokol JSON-RPC. Dalam JSON-RPC 2.0 , atribut ini harus selalu di set
dengan nilai “2.0“.
2.
Result
Atribut ini adalah sebuah nilai balikan dari sub-rutin yg dipanggil .Atribut
ini di set null jika terjadi kesalahan pada saat pemrosesan sub-rutin
tersebut.
3.
Error
Atribut ini berisi sebuah object kesalahan yang akan di kembalikan jika
terdapat kesalahan ketika proses pemanggilan sub-rutin, tapi atribut ini
akan di set null jika tidak ada kesalahan ketika pemrosesan
4.
Id
harus Id yang sama dengan Id yg di tentukan pada objek permintaan
Sebuah objek balasan memiliki format dalam bentuk JSON, format nya
adalah sebagai berikut :
Format : {"jsonrpc": "2.0", "result": [hasil], "id": [Identitas dari objek
permintaan]}
Contoh : {"jsonrpc": "2.0", "result": [“film horror 1”,”film horror 2”],
"id": “A1”}
2.4.1.4 objek balasan kesalahan (error response object)
Pemanggilan terhadap sub-rutin terkadang mengalami kegagalan dalam
pemrosesannya , dalam hal ini server harus dapat mengantisipasinya, yaitu dengan
mengirimkan sebuah objek balasan yang berisi informasi kesalahan yang terjadi
ketika pemanggilan sub-rutin tersebut
Sebuah objek balasan kesalahan memiliki format dalam bentuk JSON,
format nya adalah sebagai berikut :
16
Format : {"jsonrpc": "2.0", "error": {"code": [kode kesalahan],
"message": [pesan kesalahan]}, "id": null}
Contoh : {"jsonrpc": "2.0", "error": {"code": -32600, "message":"Invalid
Request."}, "id": null}
2.4.1.5 Tabel kode kesalahan
Table berikut menunjukan daftar kode kesalahan dan pesan yang akan di
kirimkan aplikasi server kepada aplikasi client jika terjadi masalah ketika proses
pemanggilan terhadap sub-rutin
Tabel 2.1 Daftar Kode Kesalahan JSON-RPC
Kode
-32700
Pesan Kesalahan
Keterangan
Kesalahan dalam
Terjadi ketika server menerima sebuah
proses parsing
JSON dengan format yang tidak valid
(bukan format JSON) yang dikirimkan oleh
client dan menyebabkan sebuah kesalahan
ketika server mencoba menterjemahkan
objek JSON tersebut
-32600
-32601
-32602
Objek Permintaan
Terjadi ketika objek JSON yang dikirim
tidak valid
client bukan objek permintaan yang valid
Sub-rutin tidak
Terjadi ketika sebuah sub-rutin dari sebuah
ditemukan
objek permintaan tidak terdaftar di server
Kesalahan parameter
Kesalahan dalam pengiriman parameter
terhadap sebuah sub-rutin
-32603
Kesalahan Internal
Kesalahan internal JSON-RPC
-32099
Kesalahan Server
Disediakan untuk kesalahan yang di
to -32000
definisikan sendiri disisi server
2.4.2 Mekanisme komunikasi data pada JSON-RPC
Berikut ini adalah mekanisme komunikasi data pada JSON-RPC.
17
2.4.2.1 Alur proses pada JSON-RPC
Sebuah pemanggilan terhadap sebuah sub-rutin di server oleh client sama
halnya seperti ketika melakukan pemanggilan terhadap suatu sub-rutin lokal.
Ketika sebuah RPC dilakukan, parameter masukan dipetakan terhadap sebuah
sub-rutin yang ada di server penyedia layanan, dan client yang melakukan
pemanggilan terhadap sub-rutin tersebut menunggu sebuah objek balasan yang
akan dikembalikan dari sub-rutin yang di panggil.
Gambar 2.6 Alur proses pada JSON-RPC
Gambar tersebut menjelaskan tentang mekanisme umum yang terjadi pada
JSON-RPC. Pada gambar tersebut terdapat dua buah mesin yang saling
berkomunikasi melalui suatu jaringan, yaitu mesin client dan mesin server.
RPC Client
RPC client merupakan mesin yang akan melakukan pemanggilan terhadap
sub-rutin yang disediakan oleh server RPC. Pada mesin ini terdapat komunikasi di
layer aplikasi client. Pada saat aplikasi client akan melakukan pemanggilan
terhadap suatu sub-rutin, maka aplikasi tersebut harus terlebih dahulu
berkomunikasi dengan RPC Client Stub untuk memberitahukan sub-rutin mana
yang akan dipanggil, kemudian RPC Client stub akan membuat sebuah objek
permintaan sesuai fungsi yang di maksud pada aplikasi client, objek permintaan
tersebut nantinya akan dikirimkan ke RPC Server sudah dalam format JSON. RPC
Client stub inilah yang bertanggung jawab untuk berkomunikasi secara langsung
dengan server penyedia layanan berbasis web.
RPC Server
18
RPC Server merupakan mesin penyedia layanan layanan berbasis web, di
mesin inilah semua sub-rutin tersedia. RPC server memiliki RPC Server Stub
yang akan menerima semua objek permintaan yang dikirimkan oleh client. Bagian
ini juga yang akan menangani masalah pengiriman objek balasan terhadap client.
Ketika sebuah objek permintaan di terima, maka RPC Server Stub akan
menentukan sub-rutin mana yang akan di eksekusi sesuai dengan objek
permintaan
yang masuk. Setelah menentukan sub-rutin mana yang akan
dieksekusi, selanjutnya akan di kirimkan hasil pemrosesannya berupa objek
balasan ke client sesuai dengan ID dari objek permintaan yang dikirim. Objek
balasan yang di kirimkan sudah dalam bentuk fomat JSON.
Komunikasi Data JSON-RPC
Pada bagian berikut ini akan dijelaskan mengenai contoh komunikasi yang
dapat terjadi pada JSON-RPC, penyajiannya adalah dalam bentuk contoh
pengiriman objek permintaan dari client ke server dan contoh pengiriman objek
balasan dari server ke client.
Pemanggilan sub-rutin dengan posisi parameter
 {"jsonrpc": "2.0", "method": "pembagian", "params": [12,4], "id": 1}
 {"jsonrpc": "2.0", "result": 3, "id": 1}
Pemanggilan sub-rutin dengan nama parameter
 {"jsonrpc": "2.0", "method": "pembagian", "params": {"bilangan_dibagi":
12,"bilangan_pembagi": 4}, "id": 3}
 {"jsonrpc": "2.0", "result": 3, "id": 3}
Pemanggilan sub-rutin dengan objek notifikasi
 {"jsonrpc": "2.0", "method": "update", "params": [1,2,3,4,5]}
Pemanggilan sub-rutin yang tidak terdaftar
 {"jsonrpc": "2.0", "method": "perkalian", "id": "1"}
 {"jsonrpc": "2.0", "error": {"code": -32601, "message": "Procedure not
found."}, "id": "1"}
Pemanggilan sub-rutin dengan format JSON yang tidak valid
 {"jsonrpc": "2.0", "method": "perkalian, "params": "12", "baz]
 {"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error."}, "id":
null}
19
Pemanggilan sub-rutin dengan format JSON-RPC yang tidak valid
 [1,2,3]
 {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request."},
"id": null}
 {"jsonrpc": "2.0", "method": 1, "params": "perkalian"}
 {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request."},
"id": null}
Keterangan :

Data
yang
dikirim
ke
penyedia
layanan
berbasis
web
(objek
permintaan,/objek notifikasi)

Data yang di kirim dari penyedia layanan berbasis web ke client (objek
balasan)
2.5
JAVA
Java adalah bahasa pemrograman yang berorientasi objek (OOP) dan
dapat dijalankan pada berbagai platform sistem operasi.
2.5.1 Karateristik Java
Java memiliki karakteristik sebagai berikut :
1. Sederhana
Java menggunakan sintaks yang mirip dengan C++. Namun sintaks ada
beberapa sintaks yg telah diperbaiki, antara lain menghilangkan
penggunaan pointer yang rumit dan multiple inheritance. Selain itu juga
Java juga menggunakan alokasi memori secara otomatis dan pengumpulan
objek sampah secara otomatis.
2. Berorientasi objek
Java menggunakan pemrograman berorientasi objek yang membuat
program dapat dibuat secara modular dan dapat dipergunakan kembali.
Pemrograman berorientasi objek memodelkan dunia nyata kedalam objek
dan melakukan interaksi antar objek-objek tersebut.
20
3. Terdistribusi
Java dibuat untuk membuat aplikasi terdistribusi, hal ini didukung dengan
adanya pustaka jaringan yang sudah terintegrasi pada Java.
4. Interpreted
Program Java dijalankan menggunakan interpreter yaitu Java Virtual
Machine (JVM). Hal ini membuat kode program Java yang telah
dikompilasi menjadi Java bytecodes dapat dijalankan pada platform yang
berbeda-beda.
5. Kuat
Java mempuyai reliabilitas yang tinggi. Compiler pada Java mempunyai
kemampuan mendeteksi kesalahan secara lebih teliti dibandingkan bahasa
pemrograman lain.
6. Aman
Sebagai bahasa pemrograman untuk aplikasi internet dan terdistribusi,
Java memiliki beberapa mekanisme keamanan untuk menjaga aplikasi dan
tidak merusak sistem komputer yang menjalankan aplikasi tersebut.
7. Arsitektur yang netral
Program Java merupakan platform yang berdiri sendiri. Program cukup
mempunyai satu buah versi yang dapat dijalankan pada platform berbeda
dengan mesin virtual Java.
8. Portabel
Program Java dapat dengan mudah dijalankan pada platform yang
berbeda-beda tanpa harus dikompilasi ulang.
9. Performa
Performa pada Java cukup baik dalam hal kecepatan dan kekuatannya.
10. Dinamis
Java dirancang untuk dijalankan di lingkungan yang dinamis. Perubahan
pada suatu kelas dengan menambahkan atribut ataupun sub-rutin dapat
dilakukan tanpa menggangu program yang pengguna kelas tersebut.
2.5.2 Fase-Fase Pada Pemrograman Java
21
Gambar dibawah ini dapat menjelaskan aliran proses kompilasi dan
eksekusi dari sebuah program Java :
Gambar 2.7 Proses Kompilasi Dan Eksekusi Program Java
Langkah pertama dalam pembuatan program berbasis Java adalah
menuliskan kode program pada editor. Kode program kemudian disimpan dalam
sebuat file berekstensi .java. Selanjutnya file tersebut dikompilasi menggunakan
Java Compiler, sehingga menghasilkan sebuah file bytecode dengan ekstensi
.class. File tersebut kemudian akan dikonversikan oleh Java Interpreter menjadi
bahasa mesin sesuai dengan jenis dan platform yang digunakan.
2.6
PHP
PHP (PHP Hypertext Preprocessor) merupakan bahasa pemrograman
berbasis web yang mampu memproses data secara dinamis. PHP akan sepenuhnya
dijalankan oleh server tetapi disertakan pada halaman HTML biasa. Aplikasiaplikasi yang dibangun oleh PHP pada umumnya akan memberikan hasil pada
web browser, tetapi prosesnya secara keseluruhan dijalankan di server.
Pada prinsipnya server akan bekerja apabila ada permintaan dari client.
Dalam hal ini client menggunakan kode-kode PHP untuk mengirimkan
permintaan ke server. Ketika menggunakan PHP sebagai bahasa script aplikasi
server, maka server akan melakukan hal-hal sebagai berikut :
1. Membaca permintaan dari client
2.
Mencari halaman/page di server
3. Melakukan instruksi yang diberikan oleh PHP untuk melakukan
modifikasi pada halaman.
22
4. Mengirim kembali halaman tersebut kepada client melalui internet atau
intranet.
PHP memiliki beberapa kelebihan yaitu dapat dijalankan pada platform
yang berbeda-beda (Windows, Linux, Unix, etc.), selain itu PHP sangat mudah
dipelajari
2.7
JAVASCRIPT
JavaScript adalah suatu bahasa script yang didasarkan pada konsep
pemrograman berbasis
prototipe.
Bahasa
ini terutama terkenal
karena
penggunaannya di situs web (sebagai JavaScript sisi client) dan juga digunakan
untuk menyediakan akses script untuk objek yang dilekatkan di aplikasi lain
Download