Thursday, July 7. 2005
XMLRPC: Sebuah Perkenalan
Kebutuhan akan pemanfaatan informasi melalui internet, membuat arus pertukaran informasi melalui internet menigkat pesat. Di atas tcp/ip, sudah berjalan begitu banyak aplikasi dan pertukaran informasi. Ini membuat kebutuhan akan ketersediaan bandwidth menjadi sangat tinggi. Perkembangan perangkat lunak pun tidak bisa dilepaskan dari kebutuhan akan hal tersebut. Dalam komputasi lingkungan terdistribusi berskala luas, yang dicari adalah pemanfaatan bandwidth seefisien mungkin, karena ketersediaan infrastruktur internet tidak berjalan sepesat kebutuhan akan ruang pertukaran informasi.
World Wide Web adalah salah satu ruang pilihan tersebut. Maka pengembangan perangkat lunak yang diarahkan pada pemanfaatan halaman web semakin tinggi. Halaman web, sudah mengalami perubahan drastis dari hanya media publikasi statis, menjadi aplikasi yang jauh lebih kompleks. Pengembangan perangkat lunak untuk kebutuhan ini difokuskan pada pengembangan standar metode pertukaran informasi dan format data, untuk memudahkan komunikasi antar beragam sistem yang berbeda lingkungan dan platform pengembangannya.
Webservice dan Sistem Terdistribusi
Webservice adalah proses dan set protokol untuk menemukan dan menghubungkan sebuah sistem dengan perangkat lunak yang diekspose sebagai services melalui web. Web Services dapat berupa apa saja, mulai dari movie review, informasi bursa, nama dan isi cd musik sampai layanan pemesanan hotel dan penerbangan. Infrastruktur teknis Webservice memastikan bahwa layanan-layanan dari vendor-vendor yang berbeda.
Web services mengambil bentuk dari visi object-oriented. Object-oriented merakit perangkat lunak dari komponen-komponen menjadi satu kesatuan aplikasi untuk output yang telah ditetapkan dari aplikasi tersebut. Web services menyatukan berbagai layanan dalam bangunan blok yang loosely coupled. Ada tiga aspek utama pada web services yaitu:
- Service provider, yaitu penyedia antarmuka yang dapat membawakan seperangkat task tertentu.
- Service requester, uaitu bagian yang mencari dan memanggil software service yang menyediakan layanan bisnis tertentu. Requester ini akan mememanggil remote procedure call tertentu, mengirimkan data dan menerima hasilnya.
- Broker, yaitu bagian yang mengatur dan mempublikasikan services. Semua permintaan layanan akan melalui broker yang terikat dengan sebuah penyedia layanan tertentu.
XML digunakan untuk mengkodekan seluruh komunikasi ke Webservice. Jadi request dikirimkan dalam bentuk XML message dan diterima dalam bentuk XML response. Oleh karena itu Web services tidak terikat pada satu sistem operasi atau bahasa pemrograman tertentu. Java di Windows dapat berbicara dengan Perl di linux yang terhubung dengan Java di Solaris.
Protocol Stack adalah sekumpulan protokol yang digunakan untuk mendefinisikan, menemukan dan mengimplementasikan Web Services. Di dalamnya terdiri dari empat layer:
- Services Transport: Lapis ini berfungsi untuk mengirimkan message antar aplikasi. Saat ini, yang digunakan adalah HTTP, SMTP, FTP dan protokol-protokol yang lebih baru lainnnya seperti Blocks Extensible Exchange Protocol (BEEP).
- XML Messaging: Lapis ini berfungsi untuk mengkodekan messages dalam format umum XML sehingga messages tersebut bisa dimengerti penerimanya. Dalam hal ini adalah XML-RPC dan SOAP.
- Service Description: Lapis ini berfungsi untuk mendeskripsikan antarmuka publik ke Web services tertentu. Hal ini dilakukan melalui WSDL (Web Services Definisition Language).
- Service Discovery:Lapis ini berfungsi untuk memusatkan layanan ke bentuk yang tersusun dan menyediakan cara mudah untuk mempublikasikan dan fungsionalitas untuk menemukannya. Saat ini service ini dilakukan dengan UDDI (Universal Description, Discovery and Integration).
Fenomena yang paling utama dari ide tentang Web Services adalah : terdesentralisasi, loosely coupled dan synergistic (membawa sinergi dari semua kelebihan web) dengan kebutuhan akan adanya sistem yang lebih reseptif dan adaptif terhadap perkembangan industri.
Komunikasi antar sistem membutuhkan sebuah set standar yang berjalan di atas protokol yang dominan dipakai saat ini. Hal itu termasuk kebutuhan untuk menjalankan proses maupun prosedur pada sistem yang berbeda dalam lingkungan distribusi yang beragam dan kompleks. Di antara standar-standar komunikasi yang banyak dibicarakan adalah CORBA (Common Object Request Broker Architecture), DCOM (Distributed Common Object Model), XML-RPC (eXtensible Markup Language-Remote Procedure Call) dan SOAP (Simple Object Application Protocol).
XML-Remote Procedure Call dan Simple Object Access Protocol (SOAP) adalah protokol-protokol berbasis XML. Keduanya adalah teknologi webservice yang dihasilkan dari perkembangan lanjutan dari XML. Jadi keduanya secara literal merupakan kombinasi dari Web dan HTTP yang membuka kemungkinan baru pertukaran data antar lingkungan yang terhubung dalam jaringan. SOAP adalah perspektif middleware pertukaran data terdistribusi dan interaksi yang loosely coupled (tak terikat erat).
SOAP saat ini merupakan rekomendasi World Wide Web Consortium (W3C). XML-RPC adalah spesifikasi final yang lebih sederhana dan mudah diimplementasikan dibanding SOAP. Secara fundamental perubahan yang dibawa oleh kedua adalah kemampuan untuk memindahkan data kemana pun melalui web. Sebelumnya hal itu hanya mampu ditangani oleh Electronic Data Interchange (EDI).
EDI mendefiniskan message dan protocol yang digunakan untuk pertukaran data melalu jaringan. Tapi hal ini mengunci jaringan-jaringan yang tergabung pada satu standar tertentu, dan membuat mahal implementasi pada jaringan baru yang akan digabungkan.
Pendekatan berikutnya adalah membangun infrastruktur obyek terdistribusi (distributed object infrastructure) yang berjalan diatas internet. Ada beberapa standar yang kita kenal, yaitu: Common Object Request Broker Architecture (CORBA), Remote Method Invocation (RMI) dan Distributed Component Object Model (DCOM). Masing-masing memilih protokol sendiri yang berjalan diatas TCP/IP untuk menangani komunikasi antar obyek-obyeknya. Yang sangat populer dan sering dipertentangkan sebagai standar adalah DCOM dan CORBA. DCOM merupakan teknologi lanjutan dari Component Object Model (COM) dari Microsoft. COM menjadi dasar komunikasi antar proses obyek-obyek pada sistem operasi keluarga Windows. Sementara CORBA menjadi dasar penting komunikasi antar proses obyek-obyek pada sistem operasi jaringan non-Windows dan Java.
CORBA menggunakan Internet Inter-ORB Protocol (IIOP), sementara DCOM menggunakan Object Remote Procedure Call (ORPC) dan RMI menggunakan Java Remote Method Protocol(JRMP). Pendekatan ini berjalan bagus pada lingkungan masing-masing, memecahkan masalah bahasa dan sebagian lingkungan pengembangan, tapi meninggalkan kesulitan pada komunikasi antar mereka. Artinya CORBA hanya mampu berbicara dengan sistem lain yang yang dibangun dengan standar CORBA, demikian juga berlaku pada DCOM dan RMI. Untuk saling berbicara, maka sistem yang heterogen harus ditambahkan layer ekstra pada arsitektur yang sudah begitu kompleks tersebut.
Jika kita membangun sistem berbasis aplikasi yang secara alamiah menggunakan COM dan Active Server PAGES (ASP), sistem tersebut hanya mampu berbicara dengan sistem lain yang menggunakan standar COM juga, dalam hal ini keluarga Windows. COM ini menjadi DCOM pada server-server windows yang saling berbicara mengkomunikasikan proses-proses yang berjalan dalam sistem mereka. Jikalau memungkinkan dibangun aplikasi menggunakan ASP di lingkungan UNIX/Linux maka obyek-obyek yang bekerja akan menggunakan standar CORBA yang tidak bisa berbicara dengan COM di Windows kecuali dibangun antarmuka sebagai lapisan ekstranya.
Padahal pada teknologi ini sebenarnya selain semestinya mendukung interoperabilitas antar obyek-obyek yang sudah dibuat juga komunikasi antar obyek untuk kepentingan pertukaran data.
XML-RPC dan SOAP dibangun dengan mengkombinasikan kemampuan data XML dan kemampuan transpor HTTP, yang dengan demikian memecahkan masalah EDI dan sistem obyek terdistribusi seperti CORBA, COM dan RMI.
XML-RPC dan SOAP dikerjakan dengan mengubah sekumpulan parameter (skalar, string, tanggal, array, record, data biner) ke transmisi XML. XML-RPC didefinisikan beroperasi diatas koneksi HTTP, sementara SOAP mendeskripsikan format amplop-nya untuk RPC request yang bisa dikirimkan melalu HTTP, SMTP, FTP atau beberapa protokol TCP/IP lainnya. XML-RPC melewatkan parameternya dengan posisi sementara SOAP melewatkan paramaternya dengan nama.
Keduanya mampu melewatkan data biner dengan menggunakan pengkodean Base-64 . Yang jelas dalam hal ini XML-RPC lebih mudah diimplementasikan meskipun tidak memiliki fitur sebanyak yang dimiliki SOAP.
Salah satu kebutuhan tambahan dalam implementasi di antara cara-cara diatas, adalah kemudahan dan pemanfaatan standar pertukaran data antar beragam sistem diatas protokol HTTP, yaitu XML. Format XML paling memungkinkan komunikasi antar proses pengolahan data pada sistem yang berbeda dengan format yang mampu menampung parameter sekaligus metode bagaimana parameter tersebut harus diproses. Procedure Call adalah pemanggilan procedure yang berada pada remote environment, untuk menjalan proses dengan parameter yang dikirimkan pemanggil agar memberikan respon yang diinginkan atas sebuah rangkaian proses komputasi.
XML adalah format yang paling mudah dimengerti oleh manusia dan komputer, dengan keleluasaanya mengatur struktur data dan bahasa yang pendefinisiannya lebih mudah. SOAP dan XML-RPC adalah dua metode yang memanfaatkan XML untuk format pengiriman parameter dan pemanggilan procedure dalam internal sebuah sistem maupun remote system.
XMLRPC
XML-RPC adalah pemanggilan prosedur jarak jauh melalui HTTP dengan menggunakan XML sebagai cara pengkodeannya. XML-RPC adalah salah satu metode komputasi terdistribusi, webservice yang paling sederhana, dan implementasinya sudah digunakan secara luas, dalam berbagai bahasa pemrograman dan platform.Message XML-RPC adalah sebuah HTTP-POST request. Isi (body) dari request tersebut berupa XML procedure yang dieksekusi di server dan nilai hasil eksekusi dikembalikan dalam bentuk XML juga.
XML-RPC menyerahkan kerumitan yang harus dipikirkan bagaimana message dikirimkan antar server atau obyek-obyek yang berinteraksi dalam lingkungan terdistribusi, kepada HTTP. Fokus utamanya adalah apa yang akan disampaikan bukan bagaimana menyampaikan pesan. Contoh request XML-RPC adalah sebagai berikut:
POST /PC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type:text/xml
Content-length: 181
<?xml version='1.0'?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>41</i4></value>
</param>
</params>
<methodCall>
XML-RPC awalnya dikerjakan oleh Dave Winner dari Userland (kemudian menjadi salah satu kontributor SOAP, sebagai teknologi lanjutan yang diperluas dari XML-RPC). Masalah klasik yang mesti dipecahkannya mula-mula adalah bagaimana membuat perangkat lunak yang bisa berjalan di lingkungan yang berbeda saling berbicara. Komunikasi lintas-platform ini didemonstrasikan Winner dengan meletakkan perintah-perintah remote procedure pada body HTTP POST.Selanjutnya hanya diperlukan kosakata XML yang mendefinisikan nama-nama potongan kode perintah jarak jauh dan paramater-parameter yang diperlukannya.
Elemen XML pada XML-RPC dengan sederhana mendefinsikan kosakata untuk menyampaikan informasi prosedur-prosedur mana yang akan dieksekusi pada remote-server. Ketika server menerima message XML-RPC dari HTTP POST request, dokumen XML-nya akan digunakan untuk memicu sebuah remote-procedure dan hasilnya dikirimkan balik pada pengirimnya sebagai XML juga.
Dengan semangat pakai-ulang (reusability), XML-RPC menggunakan tipe data XMLSchema untuk paramater dan prosedur yang akan dipanggilnya. Berikut ini adalah daftar tipe dataskalar untuk parameter XML-RPC dan nilai-nilainya.
Tipe Parameter Skalar untuk XML-RPC
Tag | Tipe | Contoh |
|---|---|---|
<i4> atau <int> | four-byte signed integer | -897 |
<boolean> | 0 (false) atau 1 (true) | 1 |
<string> | ASCII string | blaaah |
<double> | double precission signed floating point number | -78.23 |
<dateTime.iso8601> | date/time | 20032224T20:01:01 |
<base64> | base64-encoded binary | 7HYBsu76HT7HJ |
Dengan begitu dokumen XML yang tersusun baik bisa dipindahkan dengan mudah menggunakan internet. Syaratnya cuma server yang sudah menjalankan HTTP service dan memiliki kemampuan menandai dokumen XML yang datang sekaligus mengenali dan menguraikan elemen-elemen-nya agar dapat mengeksekusi prosedur apapun yang dispesifikasikan dalam elemen metodeCall. XML-RPC mensyaratkan hal-hal sebagai berikut sebelum dapat digunakan:
- Dokumen XML harus tersusun baik dan mengandung stuktur tunggal elemen methodCall.
- Elemen methodCall harus mengandung sub-sub item methodName yang berisi string nama method mana yang bisa dipanggil.
- Kalau paramater diperlukan maka elemen methodCall harus mengandung parameter yang berisi individual elemen-elemen param, dan masing-masing mengandung nilai tunggal.
XML-RPC Response
Sesuai aturannya, maka setelah diproses, dan mengeksekusi beberapa prosedur dan kode, maka dapat memberikan nilai balik berdasarkan hasil procedurnya atau elemennya tidak valid.Bagaimana proses itu dilaksanakan, selanjutnya tinggal melihat bagaimana hasil procedure tersebut dikirimkan balik atau elemen fault. Diatas HTTP maka semua dianggap data.
Spesifikasi XML-RPC menyebutkan bahwa hasil remote procedure call adalah XML berstruktur tunggal yaitu methodResponse, yang berisi hasileksekusi dalam parameter tunggal atau elemen fault yang berisi informasi apa saja yang menyebabkan kesalah eksekusinya. Contoh response dari XML-RPC request:
HTTP/1.1 200 OK
Connection: Close
Content-Length: 158
Content-Type: text/xml
Date: Fri,17 Jul 1998 19:45:23 GMT
Server: Userland Frontier/5.1.2-WinNT
<?xml version='1.0' ?>
<methodResponse>
<params>
<param>
<value><string>California</string></value>
</param>
</params>
</methodResponse>
Kecuali ada level error yang lebih rendah lagi, maka response selalu 200 OK. Content-Type adalah text/xml dan Content-Length harus ada dan benar. Isi (body) dari response berupa XML berstruktur tunggal, sebuah <methodResponse>, yang berisi <params> tunggal, yang berisi <param> tunggal, yang berisi value tunggal bertipe string.
MethodResponse dapat juga berisi <fault> yang berisi <value> yang <struct>-nya berisi dua elemen, <faultCode> berupa <int> dan <faultString> berupa <string>. Method Response juga dapat berisi keduanya <fault> dan <params>. Contoh methodReponse dengan <fault>:
HTTP/1.1 200 OK
Connectio: close
Content-Length: 426
Content-Type: text/xml
Date: Fri,17 Jul 1998 19:46:00 GMT
Server: Userland Frontier/5.1.2-WinNT
<xml version='1.0'?>
<methodResponse>
<fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value><int>4</int><value>
</member>
<member>
<name>faultString</name>
<value><string>Too many parameters.</string></value>
</member>
</struct>
</value>
</fault>
</methodResponse>
Strategi/Tujuan
- Firewall. Tujuan protokol ini meletakkan landasan yang kompatibel lintas lingkungan-lingkungan yang berbeda. Tak ada sesuatu terlalu rumit ditambahakan diatas antarmuka CGI. Firewall bisa mengawasi semua transaksi Content-Type yang berupa text/xml
- Discoverability. Yaitu berupa penyusunan format yang sangat sederhana yang memungkinkan penulis HTML biasa untuk melihat file yang berisi XML-RPC, mengerti apa yang sedang dilakukan dan dapat memodifikasinya dan membuatnya bekerja kembali pada penggunaan berikutnya.
- Mudah diimplementasikan. Membuat sebuah protokol yang mudah diimplementasikan dan bisa diadaptasikan di lingkungan lain atau sisem operasi lainnya.
Penutup
XML-RPC menyederhanakan banyak hal. Dibanding SOAP, XML-RPC mungkin terlalu sederhana. Tapi juga justru itulah salah satu keunggulan XML-RPC dibandingkan arsitektur lainnya. Bersama dengan SOAP, XML-RPC bersifat terbuka, bisa dan sudah diimplementasikan di banyak platform sistem operasi dan bahasa pemrograman. Saya kira penggunaan Webservice mengatasi masalah komunikasi antar platform, karena selain menggunakan standar terbuka juga tidak mengacu pada satu lingkungan tertentu yang bersifat propietary. Itulah salah satu sebab implementasi XML-RPC sudah luas sekali, bukan hal aneh lagi bahkan sudah digunakan pada aplikasi-aplikasi cms atau blog yang populer seperti serendipity, drupal, postnuke atau mambo.
sumber: www.xmlrpc.org, beberapa buku dan majalah
View as PDF: This entry | This month | Full blog


moga sukses dan artikelnya ditambah lagi, biar yang mo TA gak usah cari buku susah-susah and mahal lagi.
Keep Rockin
kalo boleh buat ulasan lagi dong tentang JSON RPC agar lebih maknyuuuussss
saya mau nanya donk...
bedanya SOA ama RPC apa????
dua duanya kan pake protokol tuuhhh
SOA itu arsitektur, kalau SOAP itu protokol webservices. SOAP dan XMLRPC sama2 webservices. Bedanya, SOAP lebih complicated tapi lebih mendukung banyak protokol tranport (tidak hanya http seperti xmlrpc). SOAP tipe datanya jauh lebih banyak, tapi datanya juga bengkak sekali. Payload-nya bisa naik lebih dari 30%. XMLRPC saja naik segitu, apalagi SOAP. Tapi jika pada implementasinya disertai proses kompresi seperti phpxmlrpc (misal), maka itu sangat menolong meringankan http payload.
Yang menurut saya layak dipertimbangkan buat di-hack (digali lebih dalam) selain Webservices XMLRPC adalah JSON-RPC dan REST.
saya mau bertanya lagi neehh,, seandainya saya ingin membandingkan suatu perfomansi web service XML-RPC dan JSON -RPC dimana yang menjadi acuan saya adalah message interchange(pertukaran data) dalam bentuk JSON dan XML, kira kira parameter uji ukur yang tepat disis client dan servernya apa ya bagusnya????
sample client untuk uji suatu web service itu ada standarnya g siihh????
terimakasih sebelumnya,,,
salam kenal bang,,,
Efisiensi message interface tergantung library atau pemrograman terapannya. Coba pakai asumsi, jadi memang dari awal sudah memihak salah satu protokol. hehehe. Kalau json-rpc rasanya paling efisien untuk webservices yang melayani halaman-halaman AJAX. json-rpc + ajax, paling bagus dibanding xmlrpc + ajax atau soap + ajax. Aku rasa aspek interoperability-nya yg perlu ditinjau: development platform (bahasa pengembangan), environment platform (OS, Virtualisasi), kemudahan implementasi, pustaka pendukung (java lib, php lib, delphi lib) dan kebutuhan (pada kasus tertentu).
Yang pernah saya uji baru php dgn delphi (client-server dibolak-balik), sama-sama cepat dan mudah, php command line /vbscript command line (windows scripting host) dgn php/delphi, terakhir groovy (java) dengan php. Well, now xmlrpc implementation has never been so easy. have fun!
saya ingin menguji web servic dengan protokol xml-rpc dan json-rpc dimana kira kira aplikasi yang bagus untuk dibangun seperti apa ya bang apakah booklist(seperti AWS amazon web service) atau ada aplikasi lain yang bisa disarankan bang?? dimana bahasa yang dipake rencananya adalah PHP dalam hal ini saya hanya membandingkan pengaruh format JSON dan XML pada kasus RPC web service...
terima kasih atas informasinya,,, saya sangat tertarik sekali dengan teknologi web service ini,,,
Coba misalnya perpustakaan online. PHP is fine. Bisa diakses dari client sms, web, symbian, j2me (tapi berguna tidak ya, hehehe, since mini opera sudah bisa jalan web dan ajax juga) pakai xmlrpc webservice. JSON, seperti saya bilang mesti diakali buat ngirim data binary (misal image cover buku), misalnya dengan cara binary code to text scheme, Tapi prinsipnya sama. Kalau pakai php, kebetulan phpxmlrpc bisa digunakan juga library-nya sebagai json-rpc. good luck.
untuk web service itu sendiri kan memakai tiga tahap
1. description
2. package
3. discovery
naaahh untuk study kasus packaging menggunakan XML-RPC proses descriptionnya bisa ga menggunakan WSDL... terus untuk discoverynya menggunakan UDDI.. (karena setau saya yang bisa menggunakan WSDL dan UDDI itu cuman protocol web service jenis SOAP, tapi ga tau juga bener apa ga maklum bang saya masih newbie..) mohon bimbingannya....