Daftar Tulisan Berseri untuk web services

  1. Apa itu Web Services? (Bagian I)
  2. Apa itu Web Services? (Bagian II)
  3. Apa itu Web Services? (Bagian III)

Dua postingan sebelumnya saya tulis menggunakan Weblog Client yang dapat mensupport XML-RPC Client dari Wordpress (WP). Kebanyakan pengguna WP masih menggunakan administrasi web-based hanya untuk sekedar menulis post / page. Jika Anda yang memiliki kebanyakan ide (tapi sulit koneksi inet) yang jika dituangkan dalam tulisan cukup panjang, coba deh gunakan Weblog Client untuk menyimpan draft tulisan Anda secara lokal, dan publish sekiranya sudah matang. Lalu apa sih sebenarnya XML-RPC itu? Apakah termasuk ke dalam Web Services? Lalu apa untungnya Web Services itu sendiri bagi end-user dan developer?

Saya akan bahas secara singkat 3 teknologi terkait Web Services, yaitu XML-RPC, SOAP dan REST-based Web Services. Nah yang terakhir (REST - Respresentational State Transfer) itu, bukanlah spesifikasi standard seperti halnya XML-RPC dan SOAP, tapi desain dan style arsitektural dari arsitektur software berbasis network. Kita akan lihat nantinya seperti apa implementasi REST.
Rangkuman apa itu Web Services akan saya bahas di bagian kedua, setelah selesai penjelasan Web Services saya akan memberikan contoh implementasi Web Services (XML-RPC, SOAP dan REST-based) menggunakan PHP.

OK, kita mulai dengan XML-RPC (XML Remote Procudure Calling). XML-RPC merupakan spesifikasi dan kumpulan implementasi yang membuat software yang berjalan pada sistem operasi berbeda, lingkungan berbeda dapat membuat pemanggilan prosedur melalui internet. XML-RPC menggunakan HTTP sebagai media transportasi dan XML (eXtensible Markup Language) sebagai encoding pesan. XML-RPC didesain sesedarhana mungkin dalam mentransmit struktur data yang kompleks, memprosesnya dan mengembalikannya. Struktur data yang menggunakan encoding XML merupakan badan request HTTP-POST dari client. Cara paling mudah memahami XML-RPC adalah dengan melihat proses mulai dari request ke server, lalu bagaimana server menerjemahkan pesan (parsing) berformat XML, bagaimana server mendapatkan pesan client yang sudah di parsing ternyata.. katakanlah merequest prosedur jumlah(x, y), kemudian server mengeksekusi prosedur jumlah(x, y) dan hasilnya (misal hasil jumlah x + y) di encode XML lalu di kembalikan ke client sebagai response dari request-nya. Saya mengasumsikan bahwa Anda mengenal XML (Rekomendasi XML) dan spesifikasi HTTP (RFC2616) . Berikut contoh request XML-RPC:

POST /xml-rpc/server.php HTTP/1.0
Host: localhost
Content-Type: text/xml
User-Agent: The Incutio XML-RPC PHP Library
Content-length: 196

<?xml version="1.0"?>
<methodcall>
    <methodname>demo.addTwoNumbers</methodname>
    <params>
        <param>
            <value>
                <int>2</int>
            </value>
        </param>
        <param>
            <value>
                <int>3</int>
            </value>
        </param>
    </params>
</methodcall>

Bagian paling atas adalah HTTP Accept request-header (lihat RFC2616), dimana dalam spesifikasi XML-RPC harus didefinisikan dalam sebuah request. Baris paling atas di bagian header adalah URI, dimana saya merequest (POST) script (server.php) pada path server (/xml-rpc). Baris Host: merupakan server yang saya request (localhost), Content-Type: harus text/xml, User-Agent: berisi string yang menjadi identitas client (saya menggunakan library dari IXR untuk implementasi client XML-RPC) dan Content-Length: adalah panjang konten pesan (bisa tebak satuannya? Itu adalah panjang string. Karena saya menggunakan library IXR, semua pesan header sudah otomatis diperhitungkan secara valid). Setelah header adalah payload (konten yang menjadi pesan bagi server) berformat XML dan harus berisi satu struktur <methodcall> beserta sub-item bersarang lainnya. Format payload, strukturnya, tag-nya dan tipe nilai yang memenuhi spesifikasi standard XML-RPC bisa dibaca di halaman spesifikasi XML-RPC. Setelah server menerima request dan menerima format payload XML-RPC yang valid dan eksekusi prosedur addTwoNumbers memberikan nilai balik, maka saatnya server meng-encode hasilnya dalam XML dan memberikan response atas request dari client. Berikut contoh response dari server:

HTTP/1.x 200 OK
Date: Sat, 12 Apr 2008 03:59:15 GMT
Server: Apache/2.2.8 (Win32) DAV/2 mod_ssl/2.2.8 OpenSSL/0.9.8g mod_autoindex_color PHP/5.2.5
X-Powered-By: PHP/5.2.5
Content-Length: 155
Connection: close
Content-Type: text/xml

<?xml version="1.0"?>
<methodResponse>
    <params>
        <param>
            <value>
                <int>5</int>
            </value>
        </param>
    </params>
</methodResponse>
</pre>

Nah server juga harus mengembalikan format response sesuai dengan spesifikasi XML-RPC. Jika tidak ada error, server akan memberikan status code 200, Content-Type: harus text/xml, Content-Length harus ada dan benar. Badan response adalah XML dengan satu struktur <methodResponse> yang mengandung satu <params> yang mengandung satu <param> yang mengandung satu <value>. Selain bisa mengandung <params>, <methodResponse> juga bisa mengandung satu <fault> yang mengandung satu <value> bertipe <struct> mengandung dua element, satu bernama <faultCode> beritipe <int> dan satu lagi bernama <faultString> bertipe <string>. <fault> digunakan untuk merespon nilai balik terhadap tidak suksesnya eksekusi prosedur yang diinginkan, bisa dari parameter yang salah atau nama prosedur yang salah. OK, kesimpulannya XML-RPC adalah teknologi Web Services yang paling sederhana dan mudah dimengerti. Tujuan awal dibentuknya protokol XML-RPC adalah portabilitas di antara lingkungan yang berbeda, tidak perlu ada penanganan khusus dalam interface CGI dan bila ada firewall, cukup pantau request POST dengan Content-Type text/xml.

Yang kedua adalah SOAP (Simple Object Access Protocol). SOAP adalah protokol berbasis XML yang digunakan untuk pertukaran informasi antara aplikasi melalui HTTP/HTTPS, bahkan SMTP. Awalnya SOAP di kembangkan atas sokongan Microsoft, tapi kemudian di ajukan ke W3C. Untuk lebih lanjut tentang SOAP dan REST saya tulis nanti di Web Services bagian 2, karena kalau ditumpuk jadi satu pasti bacanya jadi malas sampai habis :).

Daftar referensi: