Tugas pemrogramaniii 1100631025_rpc,soap,rest_asfi yuli wulandari
-
Upload
asfiyuli-wulandari -
Category
Documents
-
view
128 -
download
0
Transcript of Tugas pemrogramaniii 1100631025_rpc,soap,rest_asfi yuli wulandari
TUGAS PEMROGRAMAN III
TENTANG RPC (Remote Procedure Calls), REST (Representational State
Transfer), SOAP (Simple Object Access Protocol)
Oleh :
ASFI YULI WULANDARI
1100631025/MI_A
PROGRAM STUDY MANAJEMEN INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH JEMBER
2013
Pengertian Remote Procedure Calls (RPC)
Pengertian Remote Procedure Calls (RPC) RPC adalah suatu protokol yang menyediakan suatu mekanisme komunikasi antar proses yang
mengijinkan suatu program untuk berjalan pada suatu komputer tanpa terasa adanya eksekusi
kode pada sistem yang jauh ( remote system ). RPC mengasumsi keberadaan dari low-level
protokol transportasi seperti TCP atau UDP untuk membawa pesan data dalam komunikasi suatu
program. Protokol RPC dibangun diatas protokol eXternal Data
Representation (XDR), yang merupakan standar dari representasi data dalam komunikasi remote.
Protokol XDR mengubah parameter dan hasil dari tiap servis RPC yang disediakan. Protokol
RPC mengijinkan pengguna (users) untuk bekerja dengan prosedur remote sebagaimana bekerja
dengan prosedur lokal. Prosedur panggilan remote (remote procedure calls) didefinisikan melalui
rutin yang terkandung didalam protokol RPC. Tiap message dari panggilan akan disesuaikan
dengan message balikan. Protokol RPC sendiri sebenarnya adalah suatu protokol untuk
”meneruskan pesan” yang mengimplemntasikan protokol non-RPC lain seperti panggilan remote
batching dan broadcasting. Protokol ini juga mendukung adanya prosedur callback dan select
subroutine pada sisi server.
Klien dan Server Klien adalah komputer atau proses yang mengakses suatu servis/layanan atau resources dari
proses atau komputer pada suatu jaringan. Server adalah komputer yang menyediakan
servis/layanan dan resources, dan yang mengimplementasikan servis jaringan. Tiap servis pada
network adalah susunan dari program remote, dan tiap program remote mengimplementasi
prosedur remote. Semua prosedur berikut parameternya dan hasilnya didokumentasi secara
spesifik pada protokol suatu program.
Protokol Message RPC Protokol Message RPC didefinisikan dengan menggunakan deskripsi data eXternal Data
Representation ( XDR ) yang meliputi struktur, enumerasi dan union. Pembahasan lebih
lanjut akan diterangkan pada bab berikutnya mengenai implementasi RPC.
Protokol Message ini membutuhkan faktor-faktor pendukung sebagai berikut :
1. Spesifikasi yang unik untuk tiap prosedur call
2. Respon message yang sesuai untuk tiap message yang diminta
3. Otentifikasi klien untuk tiap layanan dan sebaliknya Protokol Message RPC memiliki dua ( 2 )
struktur yang berbeda, yaitu call message dan reply message. Tiap klien yang akan melakukan
RPC pada suatu server di jaringan akan menerima balasan (reply) berupa hasil dari eksekusi
prosedur tersebut. Dengan menggunakan spesifikasi yang unik untuk tiap prosedure remote,
maka RPC dapat mencocokkan message balasan untuk tiap call message yang diminta klien.
Call Message
Tiap call message pada RPC mengandung nilai-nilai unsigned integer yang digunakan untuk
mengidentifikasi prosedur remote yang diminta. Nilai-nilai ini adalah :
1. Nomor Program
2. Nomor Versi dari Program
3. Nomor Prosedur
Reply Message
Reply message yang dikirimkan oleh server jaringan bervariasi tergantung apakah call messages
yang diminta klien diterima atau ditolak. Reply message mengandung informasi yang digunakan
untuk membedakan kondisi-kondisi yang diminta sesuai dengan call messages. Informasi ini
antara lain :
1. RPM mengeksekusi call message dengan sukses
2. Implementasi remote tidak sesuai dengan protokol yang digunakan. Versi yang lebih
rendah atau tinggi akan ditolak.
3. Program remote tidak tersedia pada sistem remote
4. Program remote tidak mendukung versi yang diminta klien
5. Nomor prosedur yang diminta tidak ada.
Cara Kerja RPC
Tiap prosedur yang dipanggil dalam RPC, maka proses ini harus berkoneksi dengan server
remote dengan mengirimkan semua parameter yang dibutuhkan, menunggu balasan dari server
dan melakukan proses kemudian selesai. Proses di atas disebut juga dengan stub pada sisi klien.
Sedangkan Stub pada sisi server adalah proses menunggu tiap message yang berisi permintaan
mengenai prosedur tertentu.
Diagram diatas memberikan gambaran mengenai flow dari eksekusi dalam proses RPC. Berikut
ini adalah diagram yang akan menjelaskan secara rinci mengenai proses yang terjadipada klien
dan server dalam eksekusi suatu prosedur RPC :
penjelasan dari diagram diatas :
1. Klien memanggil prosedur stub lokal. Prosedur Stub akan memberikan parameter dalam suatu
paket yang akan dikirim ke jaringan. Proses ini disebut sebagai marshalling.
2. Fungsi Network pada O/S (Operating system – Sistem Operasi) akan dipanggil oleh stub untuk
mengirim suatu message.
3. Kemudian Kernel ini akan mengirim message ke sistem remote. Kondisi ini dapat berupa
connectionless atau connection-oriented.
4. Stub pada sisi server akan melakukan proses unmarshals pada paket yang dikirim pada network.
5. Stub pada server kemudian mengeksekusi prosedur panggilan lokal.
6. Jika eksekusi prosedur ini telah selesai, maka eksekusi diberikan kembali ke stub pada server.
7. Stub server akan melakukan proses marshals lagi dan mengirimkan message nilai balikan (
hasilnya ) kembali ke jaringan.
8. Message ini akan dikirim kembali ke klien.
9. Stub klien akan membaca message ini dengan menggunakan fungsi pada jaringan.
10. Proses unmarshalled kemudian dilakukan pada message ini dan nilai balikan akan diambil untuk
kemudian diproses pada proses lokal.
Proses diatas akan dilakukan berulang-ulang ( rekursif ) dalam pengeksekusian RPC dalam suatu
remote sistem. Contoh aplikasi untuk meremote pada teknik RPC (Remote Procedure Call)
adalah menggunakan putty untuk melakukan SSH.
Fitur dalam RPC
RPC memiliki fitur - fitur sebagai berikut : batching calls, broadcasting calls, callback
procedures dan using the select subroutine.
Batching Calls
Fitur Batching calls mengijinkan klien untuk mengirim message calls ke server dalam jumlah
besar secara sequence ( berurutan ). Batching menggunakan protokol streaming byte seperti TCP
/ IP sebagai mediumnya. Pada saat melakukan batching, klien tidak menunggu server untuk
memberikan reply terhadap tiap messages yang dikirim, begitu pula dengan server yang tidak
pernah mengirimkan messages reply. Fitur inilah yang banyak digunakan klien, karena arsitektur
RPC didesain agar pada tiap call message yang dikirimkan oleh klien harus ada proses
menunggu balasan dari server. Oleh karena itu maka pihak klien harus dapat mengatasi error
yang kemungkinan terjadi karena pihak klien tidak akan menerima peringatan apabila terjadi
error pada message yang dikirim.
Salah satu implementasi RPC (Remote Procedure Call) adalah dengan
menggunakan SunRPC. Dalam tutorial kali ini, saya akan mencontohkan
pembuatan program sederhana yang menggunakan SunRPC. Service yang disediakan oleh
program adalah operasi matematika dasar, yaitu
penjumlahan, pengurangan, perkalian, pembagian, dan pencarian modulo.
Pendefinisian Service
Sebelum program yang menggunakan RPC dibuat, kita harus mendefinisikan
fungsi-fungsi atau prosedur-prosedur apa saja yang akan dibuat.
Berikut ini adalah definisi service yang akan kita buat.
Simpan text di atas ke dalam sebuah file bernama tambah.x. Sekarang
jalankan program rpcgen untuk mengubah file tersebut menjadi client
dan server stub.
Setelah program di atas dijalankan, akan terbentuk empat buah file baru.
Yaitu:
1. jumlah_clnt.c
2. jumlah_svc.c
3. jumlah.h
4. jumlah_xdr.c
Semua file tadi akan digunakan dalam pembuatan program client dan server
RPC.
Pembuatan Server Program server akan mengimplementasikan fungsi-fungsi pada server stub.
Dalam program kali ini, ada lima buah fungsi yang harus diimplementasikan,
yaitu:
struct angka {
int a;
int b;
};
program TAMBAHAN {
version TAMBAHANVER {
int tambah(angka) = 1;
int kurang(angka) = 2;
int kali(angka) = 3;
float bagi(angka) = 4;
int mod(angka) = 5;
} = 1; } = 99;
rpcgen jumlah.x
Daftar fungsi-fungsi itu dapat dilihat pada file jumlah.h.
Berikut ini adalah implementasi fungsi yang akan kita buat.
1. int * tambah_1_svc(angka *, struct svc_req *)
2. int * kurang_1_svc(angka *, struct svc_req *)
3. kali_1_svc(angka *, struct svc_req *)
4. bagi_1_svc(angka *, struct svc_req *)
5. mod_1_svc(angka *, struct svc_req *)
#include <rpc/rpc.h>
#define _RPCGEN_SVC
#include "tambah.h"
int * tambah_1_svc(angka *input, struct svc_req *req) {
static int hasil;
hasil = input->a + input-> b;
return &hasil;
}
int * kurang_1_svc(angka *input, struct svc_req *req) {
static int hasil;
hasil = input->a - input->b;
return &hasil;
}
int * kali_1_svc(angka *input, struct svc_req *req) {
static int hasil;
hasil = input->a * input-> b;
return &hasil;
}
float * bagi_1_svc(angka *input, struct svc_req *req) {
static float hasil;
hasil = (float)input->a / (float)input->b;
return &hasil;
}
int * mod_1_svc(angka *input, struct svc_req *req) {
static int hasil;
hasil = input->a % input->b;
return &hasil; }
Simpan source code di atas ke dalam file jumlah_server.c. Setelah itu,
lakukan kompilasi.
Pembuatan Client
Program yang akan menjadi client, dapat menggunakan prosedur yang
dijadikan sebagai remote procedure seolah-olah prosedur/fungsi tersebut
menjadi bagian dari program client.
Berikut ini adalah source code dari program client yang akan kita buat.
gcc -o jumlah_server jumlah_server.c jumlah_svc.c jumlah_xdr.c
#include <rpc/rpc.h>
#define _RPCGEN_CLNT
#include "tambah.h"
int main(int argc, char **argv) {
CLIENT *cl;
int *hasil;
float *hasil_float;
struct angka input;
if (argc < 2) {
printf("Masukkan alamat komputer yang menyediakan service.n");
printf("Contoh: %s localhostnn", argv[0]);
exit(1);
}
cl = clnt_create(argv[1], TAMBAHAN, TAMBAHANVER, "tcp");
if (cl == NULL) {
clnt_pcreateerror(argv[1]);
exit(1);
}
cl->cl_auth = authunix_create_default();
input.a = 2;
input.b = 2;
printf("%d + %d = %dn", input.a, input.b, *tambah_1(&input, cl));
printf("%d - %d = %dn", input.a, input.b, *kurang_1(&input, cl));
printf("%d * %d = %dn", input.a, input.b, *kali_1(&input, cl));
printf("%d / %d = %dn", input.a, input.b, *bagi_1(&input, cl));
printf("%d %% %d = %dn", input.a, input.b, *mod_1(&input, cl)); }
Simpan source code di atas ke dalam file tambah_client.c. Setelah itu
lakukan kompilasi.
Simple Object Access Protocol (SOAP)
SOAP adalah singkatan dari Simple Object Access Protocol, merupakan sebuah protokol
komunikasi client server yang mengirim dan menerima informasi "di atas HTTP". Data yang
dikirim dan diterima dalam format XML. SOAP hampir sama dengan protokol XMLRP, hanya
saja SOAP lebih cocok digunakan untuk data kompleks yang dikirim antar client-server.
Secara konseptual SOAP dapat dianggap sebagai DCOM versi XML. SOAP merupakan
mekanisme lain yang memungkinkan penggunaan remote procedure call. SOAP bersifat netral
platform, netral bahasa dan tidak bergantung pada suatu objek model. Sehingga SOAP-enabled
distributed application dapat menjangkau beragam operating sistem, dimana terdiri dari objek
yang berasal dari vendor yang berbeda, ditulis pada bahasa yang berbeda, dan didasarkan pada
objek model yang berbeda.
SOAP menjadi sangat mudah diterima oleh berbagai pihak – terutama oleh berbagai vendor TI –
dikarenakan protokol ini memanfaatkan berbagai teknologi yang sudah ada sebelumnya dan
sudah banyak digunakan. Misalnya untuk protokol transport, yang paling banyak digunakan
adalah HTTP, walaupun dimungkinkan untuk menggunakan protokol transport lainnya.
Sedangkan untuk format data atau message digunakan XML yang tidak diragukan lagi manfaat
dan perannya di dalam pertukaran data. Dengan demikian, tidaklah terlalu mengherankan bila
kemudian SOAP dianggap sebagai solusi penyelamat untuk mengatasi berbagai masalah yang
dihadapi oleh teknologi – teknologi pendahulunya.
Arsitektur SOAP
gcc -o jumlah_client jumlah_client.c jumlah_clnt.c jumlah_xdr.c
Pesan SOAP berbentuk seperti sebuah envelope yang berisi header (optional) dan body
(required). Header berisi blok informasi yang berhubungan dengan bagaimana pesan tersebut
diproses. Hal ini meliputi pe-routingan dan delivery setting, authentication atau authorization
assertions, and transaction contexts. Body berisi pesan sebenarnya yang dikirim dan diproses.
Semua yang dapat ditampilkan dengan sintaks XML dapat dimasukkan dalam pesan body.
Setiap elemen Envelope harus berisi tepat satu elemen Body. Elemen Body dapat berisi sebanyak
mungkin child nodes yang diperlukan. Isi dari elemen Body adalah pesan. Elemen Body
ditentukan dalam suatu cara dimana dapat berisi valid dan wellformed XML yang telah dibatasi
oleh suatu namespace (qualified).
Keuntungan dari SOAP
Format yang sederhana dan dapat dikembangkan
Bisa dijalankan dimana saja tidak terbatas pada platform tertentu
Bisa menggunakan bahasa pemrograman apa saja
Multi-protocol seperti HTTP, JMS, RPC, SMTP, dll.
Dapat melewati firewalls sehingga mendukung model HTTP get / reponse
Tipe yang kuat dan melekat pada sebuah kontrak
Kekurangan dari SOAP
Walaupun sederhana, pesannya dapat panjang karena kebutuhannya untuk mengemasnya
dalam bentuk SOAP envelope
Karena SOAP berbasis XML, dibutuhkan waktu untuk parsing XML tersebut karena harus di
kedua pihak melakukannya (pengirim dan penerima pesan)
Walaupun SOAP standart yang terbuka, tidak semua bahasa mendukung dengan baik. Yang
terbaik untuk mendukung SOAP adalah JAVA, .Net, dan Flex.
SOAP menggunakan teknologi XML utuk mendefinisikan rangka kerja pemesanan terekstrensi di mana
menyediakan konstruksi pesan yang dapat dipertukarkan pada protokol berbeda. Rangka kerja dirancang
bebas dari model pemrograman dan spesifikasi implementasi semantik.
SOAP meliputi empat bagian:
SOAP paket (amplop), mendefinisikan sebuah paket menggambarkan apa isi pesan yang terkirim,
yang seharusnya menerima dan menangani dan bagaimana menangani kerangka kerja mereka;
SOAP Encoding aturan (aturan encoding), digunakan untuk merepresentasikan aplikasi perlu
menggunakan tipe data contoh;
SOAP RPC kata (RPC representasi), bahwa panggilan prosedur terpencil dan tanggapan dari
perjanjian;
SOAP Binding (mengikat), protokol yang mendasari digunakan untuk bertukar informasi.
Meskipun empat bagian sebagai bagian dari SOAP, sebagai definisi keseluruhan, tetapi mereka
secara fungsional berpotongan satu sama independen lain. Secara khusus, amplop dan aturan encoding
didefinisikan di ruang nama XML yang berbeda (namespace), sehingga membuat definisi mudah.
Dua tujuan desain utama SOAP adalah kesederhanaan dan skalabilitas. Ini berarti bahwa ada beberapa
sistem informasi tradisional atau sistem objek terdistribusi, beberapa properti tidak akan menjadi bagian
dari spesifikasi SOAP.
Kali ini saya akan memberikan sedikit contoh aplikasi SOAP Hello World agar lebih mudah
memahami belajar SOAP.
Hal yang pertama dilakukan adalah membuat Script Server Side, Script yang akan
menangani Request Client Side.
Simpan script tersebut dengan nama server.php di htdocs Anda. Misal di
http://localhost/server.php
Selanjutnya adalah membuat sebuah script untuk client side, yang akan menjalankan function
Hello World yang ada pada Server Side.
Simpan script tersebut dengan nama index.php di htdocs Anda. Misal di http://localhost/index.php
<?php
function HelloWorld($MyName) {
return 'Hello World, and Hello '.$MyName;
}
$server = new SoapServer(NULL, array(
'soap_version'=>SOAP_1_2,
'encoding'=>'ISO-8859-1',
'uri'=>'http://www.w3.org/2001/12/soap-encoding'
));
$server->addFunction("HelloWorld");
$server->handle();
?>
<?PHP
$client = new SoapClient(NULL, array(
'location'=>'http://localhost/server.php',
'uri'=>'http://localhost/',
'trace'=>1
));
$return = $client->__soapCall("HelloWorld", array('Saya'));
echo $client->__getLastResponse();
?>
Representational State Transfer atau REST
Representational State Transfer atau REST pada dasarnya berarti bahwa tiap URL yang unik
adalah representasi dari beberapa objek. Kamu bisa mendapatkan konten objek itu menggunakan
HTTP GET, untuk menghapusnya, mungkin memakai POST, PUT, atau DELETE untuk
memodifikasi objek. Pada praktiknya, kebanyakan web servis memakai POST.
Semua web servis besar di internet sekarang ini menggunakan REST: Twitter, web servis Yahoo,
Flickr, del.icio.us, pubsub, bloglines, technorati, dan beberapa lainnya. eBay dan Amazon
memiliki web servis dengan REST dan SOAP.
REST tidaklah sempurna, dan bukan solusi terbaik utnuk setiap web servis. Data yang perlu
diamankan tidak boleh dikirim sebagai parameter dalam URI. Dan jumlah data yang besar,
seperti detail belanja, dapat menjadi tidak praktis atau tidak bisa dipakai dalam URI.
Dan ketika menggunakan attachment (pelampiran file), SOAP unggul. SOAP dapat
mengirimkan teks dan binary. Untuk kasus seperti ini, SOAP merupakan solusi yang solid.
Tetapi penting untuk memakai REST terlebih dahulu dan menggunakan SOAP jika memang
perlu. Ini membantu menjaga pengembangan aplikasi tetap sederhana dan mudah diakses.
Implementasi REST Web Services memiliki empat dasar prinsip desain yaitu:
Gunakan metode HTTP secara eksplisit.
Stateless.
URI berbentuk seperti direktori.
Ditransfer menggunakan XML, JavaScript Object Notation (JSON), atau keduanya.
Keuntungan utama dari web servis REST adalah:
· ightweigt, tidak membutuhkan XML markup tambahan
· hasilnya dapat dibaca dengan mudah oleh manusia (human readable result)
· mudah untuk dikembangkan, tidak membutuhkan toolkit
Keuntungan REST
bahasa dan platform agnostic
lebih sederhana/simpel untuk dikembangkan ketimbang SOAP
mudah dipelajari, tidak bergantung pada tools
ringkas, tidak membutuhkan layer pertukaran pesan (messaging) tambahan
secara desain dan filosofi lebih dekat dengan web
Kelemahan REST
Mengasumsi model point-to-point komunikasi - tidak dapat digunakan untuk lingkungan
komputasi terdistribusi di mana pesan akan melalui satu atau lebih perantara
Kurangnya dukungan standar untuk keamanan, kebijakan, keandalan pesan, dll, sehingga
layanan yang mempunyai persyaratan lebih canggih lebih sulit untuk dikembangkan
("dipecahkan sendiri")
Berkaitan dengan model transport HTTP