XML-RPC - Panduan Cepat
RPC adalah singkatan dari Remote Procedure Call. Seperti namanya, ini adalah mekanisme untuk memanggil prosedur atau fungsi yang tersedia di komputer jarak jauh. RPC adalah teknologi yang jauh lebih tua daripada Web. Secara efektif, RPC memberi pengembang mekanisme untuk menentukan antarmuka yang dapat dipanggil melalui jaringan. Antarmuka ini bisa sesederhana panggilan fungsi tunggal atau serumit API besar.
Apa itu XML-RPC?
XML-RPC adalah salah satu pendekatan layanan web yang paling sederhana dan sangat mudah yang memudahkan komputer untuk memanggil prosedur di komputer lain.
XML-RPC mengizinkan program untuk membuat panggilan fungsi atau prosedur melalui jaringan.
XML-RPC menggunakan protokol HTTP untuk meneruskan informasi dari komputer klien ke komputer server.
XML-RPC menggunakan kosakata XML kecil untuk menjelaskan sifat permintaan dan tanggapan.
Klien XML-RPC menentukan nama prosedur dan parameter dalam permintaan XML, dan server mengembalikan kesalahan atau respons dalam respons XML.
Parameter XML-RPC adalah daftar sederhana jenis dan konten - struct dan array adalah jenis paling kompleks yang tersedia.
XML-RPC tidak memiliki pengertian tentang objek dan tidak ada mekanisme untuk menyertakan informasi yang menggunakan kosakata XML lainnya.
Dengan XML-RPC dan layanan web, bagaimanapun, Web menjadi kumpulan koneksi prosedural di mana komputer bertukar informasi di sepanjang jalur yang terikat erat.
XML-RPC muncul pada awal 1998; itu diterbitkan oleh UserLand Software dan awalnya diimplementasikan dalam produk Frontier mereka.
Mengapa XML-RPC?
Jika Anda perlu mengintegrasikan beberapa lingkungan komputasi, tetapi tidak perlu berbagi struktur data kompleks secara langsung, Anda akan menemukan bahwa XML-RPC memungkinkan Anda membangun komunikasi dengan cepat dan mudah.
Bahkan jika Anda bekerja dalam satu lingkungan, Anda mungkin menemukan bahwa pendekatan RPC memudahkan untuk menghubungkan program yang memiliki model data yang berbeda atau ekspektasi pemrosesan dan dapat memberikan akses mudah ke logika yang dapat digunakan kembali.
XML-RPC adalah alat yang sangat baik untuk membangun berbagai macam koneksi antar komputer.
XML-RPC menawarkan integrator kesempatan untuk menggunakan kosakata standar dan pendekatan untuk bertukar informasi.
Bidang aplikasi XML-RPC yang paling jelas adalah menghubungkan berbagai jenis lingkungan, memungkinkan Java untuk berbicara dengan Perl, Python, ASP, dan sebagainya.
Ikhtisar Teknis XML-RPC
XML-RPC terdiri dari tiga bagian yang relatif kecil:
XML-RPC data model : Seperangkat tipe untuk digunakan dalam melewatkan parameter, nilai kembali, dan kesalahan (pesan kesalahan).
XML-RPC request structures : Permintaan HTTP POST yang berisi informasi metode dan parameter.
XML-RPC response structures : Respons HTTP yang berisi nilai kembali atau informasi kesalahan.
Kita akan mempelajari ketiga komponen ini di tiga bab berikutnya.
Spesifikasi XML-RPC mendefinisikan enam tipe data dasar dan dua tipe data gabungan yang mewakili kombinasi tipe.
Tipe Data Dasar di XML-RPC
Tipe | Nilai | Contoh |
---|---|---|
int atau i4 | Bilangan bulat 32-bit antara - 2.147.483.648 dan 2.147.483.647. | <int> 27 </int> <i4> 27 </i4> |
dua kali lipat | Angka floating-point 64-bit | <double> 27.31415 </double> <double> -1.1465 </double> |
Boolean | benar (1) atau salah (0) | <boolean> 1 </boolean> <boolean> 0 </boolean> |
tali | Teks ASCII, meskipun banyak implementasi mendukung Unicode | <string> Halo </ string> <string> gila! @ </ string> |
dateTime.iso8601 | Tanggal dalam format ISO8601: CCYYMMDDTHH: MM: SS | <dateTime.iso8601> 20021125T02: 20: 04 </dateTime.iso8601> <dateTime.iso8601> 20020104T17: 27:30 </dateTime.iso8601> |
base64 | Informasi biner yang dikodekan sebagai Basis 64, sebagaimana ditentukan dalam RFC 2045 | <base64> SGVsbG8sIFdvcmxkIQ == </base64> |
Tipe dasar ini selalu diapit dalam elemen nilai . String (dan hanya string) boleh diapit dalam elemen nilai tetapi mengabaikan elemen string . Tipe dasar ini dapat digabungkan menjadi dua tipe yang lebih kompleks, array, dan struct. Array mewakili informasi berurutan, sedangkan struct mewakili pasangan nama-nilai, seperti hashtable, array asosiatif, atau properti.
Array ditunjukkan oleh elemen array , yang berisi elemen data yang menyimpan daftar nilai. Seperti tipe data lainnya, elemen array harus diapit oleh elemen nilai . Misalnya, array berikut berisi empat string:
<value>
<array>
<data>
<value><string>This </string></value>
<value><string>is </string></value>
<value><string>an </string></value>
<value><string>array.</string></value>
</data>
</array>
</value>
Array berikut berisi empat bilangan bulat:
<value>
<array>
<data>
<value><int>7</int></value>
<value><int>1247</int></value>
<value><int>-91</int></value>
<value><int>42</int></value>
</data>
</array>
</value>
Array juga dapat berisi campuran dari berbagai jenis, seperti yang ditunjukkan di sini:
<value>
<array>
<data>
<value><boolean>1</boolean></value>
<value><string>Chaotic collection, eh?</string></value>
<value><int>-91</int></value>
<value><double>42.14159265</double></value>
</data>
</array>
</value>
Membuat array multidimensi itu sederhana - cukup tambahkan array di dalam array:
<value>
<array>
<data>
<value>
<array>
<data>
<value><int>10</int></value>
<value><int>20</int></value>
<value><int>30</int></value>
</data>
</array>
</value>
<value>
<array>
<data>
<value><int>15</int></value>
<value><int>25</int></value>
<value><int>35</int></value>
</data>
</array>
</value>
</data>
</array>
</value>
Struct sederhana mungkin terlihat seperti ini:
<value>
<struct>
<member>
<name>givenName</name>
<value><string>Joseph</string></value>
</member>
<member>
<name>familyName</name>
<value><string>DiNardo</string></value>
</member>
<member>
<name>age</name>
<value><int>27</int></value>
</member>
</struct>
</value>
Dengan cara ini Anda dapat mengimplementasikan hampir semua tipe data yang didukung oleh bahasa pemrograman apa pun.
Permintaan XML-RPC adalah kombinasi konten XML dan header HTTP. Konten XML menggunakan struktur pengetikan data untuk meneruskan parameter dan berisi informasi tambahan yang mengidentifikasi prosedur mana yang dipanggil, sedangkan header HTTP menyediakan pembungkus untuk meneruskan permintaan melalui Web.
Setiap permintaan berisi satu dokumen XML, yang elemen akarnya adalah elemen methodCall . Setiap elemen methodCall berisi elemen methodName dan elemen params . The methodName mengidentifikasi unsur nama prosedur yang akan dipanggil, sedangkan params elemen berisi daftar parameter dan nilai-nilai mereka. Setiap elemen params menyertakan daftar elemen param yang pada gilirannya berisi elemen nilai .
Misalnya, untuk meneruskan permintaan ke metode yang disebut circleArea , yang mengambil parameter Double (untuk radius), permintaan XML-RPC akan terlihat seperti:
<?xml version="1.0"?>
<methodCall>
<methodName>circleArea</methodName>
<params>
<param>
<value><double>2.41</double></value>
</param>
</params>
</methodCall>
Header HTTP untuk permintaan ini akan mencerminkan pengirim dan kontennya. Template dasarnya terlihat sebagai berikut:
POST /target HTTP 1.0
User-Agent: Identifier
Host: host.making.request
Content-Type: text/xml
Content-Length: length of request in bytes
Misalnya, jika metode circleArea tersedia dari server XML-RPC yang mendengarkan di / xmlrpc , permintaannya mungkin terlihat seperti:
POST /xmlrpc HTTP 1.0
User-Agent: myXMLRPCClient/1.0
Host: 192.168.124.2
Content-Type: text/xml
Content-Length: 169
Dirakit, seluruh permintaan akan terlihat seperti:
POST /xmlrpc HTTP 1.0
User-Agent: myXMLRPCClient/1.0
Host: 192.168.124.2
Content-Type: text/xml
Content-Length: 169
<?xml version="1.0"?>
<methodCall>
<methodName>circleArea</methodName>
<params>
<param>
<value><double>2.41</double></value>
</param>
</params>
</methodCall>
Ini adalah permintaan HTTP biasa, dengan muatan yang dibuat dengan hati-hati.
Tanggapan mirip dengan permintaan, dengan beberapa perubahan tambahan. Jika respons berhasil - prosedur ditemukan, dijalankan dengan benar, dan mengembalikan hasil - maka respons XML-RPC akan terlihat seperti permintaan, kecuali bahwa elemen methodCall diganti dengan elemen methodResponse dan tidak ada elemen methodName :
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><double>18.24668429131</double></value>
</param>
</params>
</methodResponse>
Respons XML-RPC hanya dapat berisi satu parameter.
Parameter itu bisa berupa array atau struct, jadi dimungkinkan untuk mengembalikan beberapa nilai.
Itu selalu diperlukan untuk mengembalikan nilai sebagai tanggapan. Sebuah "nilai sukses" - mungkin Boolean disetel ke true (1).
Seperti halnya permintaan, tanggapan dikemas dalam HTTP dan memiliki header HTTP. Semua tanggapan XML-RPC menggunakan kode tanggapan 200 OK, bahkan jika terdapat kesalahan dalam pesan. Header menggunakan struktur umum yang mirip dengan request, dan kumpulan header biasanya terlihat seperti:
HTTP/1.1 200 OK
Date: Sat, 06 Oct 2001 23:20:04 GMT
Server: Apache.1.3.12 (Unix)
Connection: close
Content-Type: text/xml
Content-Length: 124
XML-RPC hanya membutuhkan dukungan HTTP 1.0, tetapi HTTP 1.1 kompatibel.
Jenis Konten harus disetel ke teks / xml.
Header Panjang Konten menentukan panjang respons dalam byte.
Respons lengkap, dengan header dan payload respons, akan terlihat seperti ini:
HTTP/1.1 200 OK
Date: Sat, 06 Oct 2001 23:20:04 GMT
Server: Apache.1.3.12 (Unix)
Connection: close
Content-Type: text/xml
Content-Length: 124
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><double>18.24668429131</double></value>
</param>
</params>
</methodResponse>
Setelah respons dikirim dari server XML-RPC ke klien XML-RPC, koneksi ditutup. Permintaan tindak lanjut perlu dikirim sebagai koneksi XML-RPC terpisah.
Kesalahan XML-RPC adalah jenis respons. Jika ada masalah dalam memproses permintaan XML-RPC, elemen methodResponse akan berisi elemen kesalahan alih-alih elemen params. Elemen kesalahan, seperti elemen params , hanya memiliki satu nilai yang menunjukkan ada yang tidak beres. Respons kesalahan mungkin terlihat seperti:
<?xml version="1.0"?>
<methodResponse>
<fault>
<value><string>No such method!</string></value>
</fault>
</methodResponse>
Kesalahan juga akan memiliki kode kesalahan. XML-RPC tidak membakukan kode kesalahan sama sekali. Anda harus memeriksa dokumentasi untuk paket tertentu untuk melihat bagaimana mereka menangani kesalahan.
Respons kesalahan juga bisa terlihat seperti:
<?xml version="1.0"?>
<methodResponse>
<fault>
<value>
<struct>
<member>
<name>code</name>
<value><int>26</int></value>
</member>
<member>
<name>message</name>
<value><string>No such method!</string></value>
</member>
</struct>
</value>
</fault>
</methodResponse>
Untuk mendemonstrasikan XML-RPC, kita akan membuat server yang menggunakan Java untuk memproses pesan XML-RPC, dan kita akan membuat klien Java untuk memanggil prosedur di server tersebut.
Percakapan di sisi Java menggunakan Apache XML-RPC Apache XML Project, tersedia di http://xml.apache.org/xmlrpc/
Letakkan semua file .jar di jalur yang sesuai dan mari kita buat satu klien dan satu server XML-RPC kecil menggunakan JAVA.
Klien XML-RPC
Mari kita tulis klien XML-RPC untuk memanggil fungsi yang disebut fungsi penjumlahan . Fungsi ini mengambil dua parameter dan mengembalikan jumlahnya.
import java.util.*;
import org.apache.xmlrpc.*;
public class JavaClient
{
public static void main (String [] args)
{
try {
XmlRpcClient client = new XmlRpcClient("http://localhost/RPC2");
Vector params = new Vector();
params.addElement(new Integer(17));
params.addElement(new Integer(13));
Object result = server.execute("sample.sum", params);
int sum = ((Integer) result).intValue();
System.out.println("The sum is: "+ sum);
} catch (Exception exception) {
System.err.println("JavaClient: " + exception);
}
}
}
Mari kita lihat apa yang terjadi pada klien contoh di atas.
Paket Java org.apache.xmlrpc berisi kelas untuk klien Java XML-RPC dan server XML-RPC, misalnya, XmlRpcClient.
Paket java.util diperlukan untuk kelas Vektor.
Fungsi server.execute (...) mengirimkan permintaan ke server. Jumlah prosedur (17,13) dipanggil di server seolah-olah itu adalah prosedur lokal. Nilai kembali dari panggilan prosedur selalu berupa Objek.
Di sini "sampel" menunjukkan penangan yang ditentukan di server.
Perhatikan bahwa semua parameter panggilan prosedur selalu dikumpulkan dalam Vektor.
Kelas XmlRpcClient dibuat dengan menentukan "alamat web" dari mesin server diikuti oleh / RPC2.
localhost - berarti mesin lokal
Anda dapat menentukan nomor IP sebagai ganti localhost, misalnya 194.80.215.219
Anda dapat menentukan nama domain seperti xyz.dyndns.org
Anda dapat menentukan nomor port bersama dengan nama domain sebagai xyz.dyndns.org:8080. Port default adalah 80
Perhatikan bahwa hasil dari panggilan prosedur jarak jauh selalu berupa Objek dan harus dicor ke jenis yang sesuai.
Ketika masalah terjadi (tidak ada koneksi, dll.), Exception dilemparkan dan harus ditangkap menggunakan pernyataan catch .
Karena panggilan di atas, klien mengirimkan pesan berikut ke server. Perhatikan bahwa ini ditangani oleh server.execute (...) secara internal dan Anda tidak ada hubungannya dengan itu.
<?xml version="1.0" encoding="ISO-8859-1"?>
<methodCall>
<methodName>sample.sum</methodName>
<params>
<param>
<value><int>17</int></value>
</param>
<param>
<value><int>13</int></value>
</param>
</params>
</methodCall>
Server XML-RPC
Berikut ini adalah kode sumber XML-RPC Server yang ditulis di Java. Itu menggunakan kelas bawaan yang tersedia di org.apache.xmlrpc. *
import org.apache.xmlrpc.*;
public class JavaServer
{
public Integer sum(int x, int y)
{
return new Integer(x+y);
}
public static void main (String [] args)
{
try {
System.out.println("Attempting to start XML-RPC Server...");
WebServer server = new WebServer(80);
server.addHandler("sample", new JavaServer());
server.start();
System.out.println("Started successfully.");
System.out.println("Accepting requests. (Halt program to stop.)");
} catch (Exception exception)
{
System.err.println("JavaServer: " + exception);
}
}
}
Mari kita lihat apa yang telah kita lakukan di server contoh di atas.
Paket org.apache.xmlrpc berisi kelas WebServer untuk implementasi Server XML-RPC.
Prosedur sum yang disebut jarak jauh diimplementasikan sebagai metode umum di kelas.
Sebuah contoh dari kelas server yang sama kemudian dikaitkan dengan penangan yang dapat diakses oleh klien.
Server diinisialisasi dengan nomor port (di sini: 80).
Ketika masalah terjadi, Exception dilemparkan dan harus ditangkap menggunakan pernyataan catch .
Untuk panggilan yang disebutkan dalam klien contoh yang diberikan, server mengirimkan respons berikut kembali ke klien:
<?xml version="1.0" encoding="ISO-8859-1"?>
<methodResponse>
<params>
<param>
<value><int>30</int></value>
</param>
</params>
</methodResponse>
Sekarang server Anda sudah siap, jadi kompilasi dan jalankan sesuai perintah Anda sebagai berikut:
C:\ora\xmlrpc\java>java JavaServer
Attempting to start XML-RPC Server...
Started successfully.
Accepting requests. (Halt program to stop.)
Sekarang untuk menguji fungsionalitasnya, berikan panggilan ke server ini sebagai berikut:
C:\ora\xmlrpc\java>java JavaClient
30
Dalam tutorial ini, Anda telah mempelajari apa itu XML-RPC dan mengapa kita membutuhkan XML-RPC. Kami telah membahas tentang model datanya, serta format pesan permintaan dan respons yang akan dipertukarkan antara klien dan server. Kami telah memberikan satu contoh untuk menunjukkan bagaimana klien dan server XML-RPC bekerja untuk bertukar informasi.
XML-RPC adalah konsep yang sangat sederhana dengan kemampuan yang terbatas. Batasan tersebut dalam banyak hal merupakan fitur XML-RPC yang paling menarik, karena secara substansial mengurangi kesulitan dalam mengimplementasikan protokol dan menguji interoperabilitasnya.
Meskipun XML-RPC sederhana, aplikasi kreatif dari alat sederhana dapat menciptakan arsitektur yang canggih dan kuat. Dalam kasus di mana berbagai macam sistem yang berbeda perlu berkomunikasi, XML-RPC mungkin merupakan penyebut umum terendah yang paling sesuai.
Apa berikutnya?
Langkah selanjutnya adalah mempelajari WSDL dan SOAP.
WSDL
WSDL adalah bahasa berbasis XML untuk menjelaskan layanan Web dan cara mengaksesnya.
WSDL menjelaskan layanan web, bersama dengan format pesan dan detail protokol untuk layanan Web tersebut.
Jika Anda ingin mempelajari lebih lanjut tentang WSDL, silakan ikuti tutorial WSDL kami .
SABUN MANDI
SOAP adalah protokol berbasis XML sederhana yang memungkinkan aplikasi untuk bertukar informasi melalui HTTP.
Jika Anda ingin mempelajari lebih lanjut tentang SOAP, silakan lihat tutorial SOAP kami .