Memahami bagaimana SOAP bekerja
Inti layanan Web adalah SOAP (Simple Object Access Protocol), protokol komunikasi utama yang memungkinkan semua bagian arsitektur bekerja sama satu sama lain. Di kolom ini, bagian kedua dari rangkaian yang membahas protokol yang mendasari layanan Web, saya akan memeriksa peran SOAP dalam layanan Web, menjelaskan bagaimana SOAP bekerja, dan melihat beberapa potensi perangkap dengan protokol.
Bagaimana SOAP cocok dengan layanan Web
Pertama, mari kita lihat bagaimana SOAP sesuai dengan skema layanan Web. Kami akan memulai dengan penyegaran singkat tentang bagaimana layanan Web bekerja. Layanan Web adalah modul perangkat lunak yang diselenggarakan oleh penyedia layanan, yang dapat dijalankan melalui Internet.
Agar tersedia untuk orang lain, deskriptor berbasis XML tentang layanan Web diterbitkan ke registri layanan. Informasi tentang layanan Web dan cara menjalankannya ditemukan di deskriptor. Ketika peminta layanan (yang bisa menjadi perangkat lunak) ingin menjalankan layanan Web, ia menghubungi layanan registri. Berdasarkan apa yang ditemukannya dalam deskriptor, pemohon mengikat penyedia layanan dan menjalankan layanan Web.
SOAP adalah protokol komunikasi yang memungkinkan semua ini terjadi. Ini digunakan untuk mempublikasikan deskriptor ke dalam registry layanan; untuk mengirim permintaan layanan dari peminta ke registri; untuk mengirim informasi dari registri ke pemohon; dan kemudian mengizinkan pemohon untuk mengikat ke penyedia layanan dan menjalankan layanan Web. Ini aman untuk mengatakan bahwa tanpa SOAP, tidak mungkin ada layanan Web.
SOAP adalah protokol berbasis XML - keseluruhan tujuannya adalah mengirim dan menerima informasi XML. Ini diciptakan dan diperjuangkan oleh Microsoft, dan pada awalnya disambut dengan skeptis oleh orang-orang yang percaya bahwa ini adalah usaha raksasa perangkat lunak untuk membajak sebuah internet. Tapi pandangan itu telah berubah, dan sekarang diakui sebagai standar umum, dan perkembangannya dipandu oleh World Wide Web Consortium (W3C), organisasi yang memandu standar Web yang paling penting.
Anatomi pesan SOAP
Pesan yang dikirim melalui SOAP ada dalam format XML, dan terdiri dari tiga bagian - sebuah Envelope, Header dan Body, seperti yang dapat Anda lihat di gambar diatas. Envelope tersebut mengenkapsulasi header dan body pesan, dan berisi berbagai informasi yang diperlukan untuk memproses pesan, termasuk deskripsi jenis data yang dapat ditemukan di dalam envelope, dan informasi tentang bagaimana data tersebut harus diproses. Ini juga berisi informasi tentang pengirim dan penerima pesan.
SOAP tidak mengharuskan pesan berisi header, meskipun sebagai masalah praktis, pesan akan menyertakannya saat SOAP digunakan di layanan Web. Informasi yang ditemukan di header bisa melakukan berbagai fungsi, seperti memberikan otentikasi. Data yang ditemukan di header disusun menjadi blok header. Ada satu atau lebih blok di header.
Body pesan adalah apa yang sebenarnya berisi data. Data mungkin merupakan permintaan informasi - misalnya, saat peminta layanan mencari registri layanan untuk layanan Web. Atau mungkin akan menanggapi permintaan informasi, seperti saat registri mengirim kembali deskriptor layanan. Data yang ditemukan di dalam body diatur ke dalam sub-elemen. Bisa ada satu atau lebih sub elemen dalam body.
Ini semua mungkin terdengar agak abstrak, jadi saya menyertakan contoh pesan SOAP yang disatukan oleh W3C. Pesan sampel adalah permintaan reservasi perjalanan dikirim melalui SOAP. Seperti yang dapat Anda lihat, seluruh pesan itu sendiri ada dalam format XML, seperti juga semua pesan SOAP. Meskipun Anda mungkin tidak dapat memahami semua hal yang Anda lihat, jika Anda meluangkan beberapa menit untuk memeriksanya, Anda akan bisa merasakan apa yang dilakukan oleh setiap elemen pesan SOAP.
<?xml version='1.0' ?> <env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope"> <env:Header> <m:reservation xmlns:m="http://travelcompany.example.org/reservation" env:actor="http://www.w3.org/2001/12/soap-envelope/actor/next" env:mustUnderstand="true"> <m:reference>uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d</reference> <m:dateAndTime>2001-11-29T13:20:00.000-05:00</m:dateAndTime> </m:reservation> <n:passenger xmlns:n="http://mycompany.example.com/employees" env:actor="http://www.w3.org/2001/12/soap-envelope/actor/next" env:mustUnderstand="true"> <n:name>John Q. Public</n:name> </n:passenger> </env:Header> <env:Body> <p:itinerary xmlns:p="http://travelcompany.example.org/reservation/travel"> <p:departure> <p:departing>New York</p:departing> <p:arriving>Los Angeles</p:arriving> <p:departureDate>2001-12-14</p:departureDate> <p:departureTime>late afternoon</p:departureTime> <p:seatPreference>aisle</p:seatPreference> </p:departure> <p:return> <p:departing>Los Angeles</p:departing> <p:arriving>New York</p:arriving> <p:departureDate>2001-12-20</p:departureDate> <p:departureTime>mid morning</p:departureTime> <p:seatPreference/> </p:return> </p:itinerary> <q:lodging xmlns:q="http://travelcompany.example.org/reservation/hotels"> <q:preference>none</q:preference> </q:lodging> </env:Body> </env:Envelope>
Potensi masalah dengan SOAP
Perangkap potensial terbesar dengan protokolnya adalah bahwa implementasi SOAP yang berbeda mungkin tidak bekerja satu sama lain. Anda jarang akan bekerja secara langsung dengan SOAP sendiri - sebagai gantinya, Anda akan bekerja dengan toolkit SOAP yang menciptakan pesan SOAP, atau dengan toolkit layanan Web yang akan membuatnya. Seringkali, toolkit ini diterjemahkan dari bahasa ke SOAP - misalnya, Anda dapat menggunakan toolkit untuk menerjemahkan fungsi COM ke SOAP, dan toolkit yang berbeda untuk menerjemahkan fungsi JAVA ke SOAP. Masalahnya adalah bahwa setiap toolkit dapat menerapkan SOAP secara berbeda, dan mungkin tidak akan bekerja dengan baik satu sama lain.
Ini akan menjadi masalah khusus bagi siapa saja yang ingin mengembangkan keduanya .NET dan untuk layanan Web berbasis Java. Mungkin ada ketidaksesuaian saat berhadapan dengan SOAP di dua dunia yang berperang itu. Sebagai contoh kecil, ketika menyangkut angka, implementasi NET dan Java bervariasi: Dengan .NET Anda dapat memasukkan angka ke 29 angka desimal, sementara dengan Java, Anda hanya bisa pergi ke 18 tempat desimal.
Jika Anda mengembangkan layanan Web, Anda harus bekerja dengan SOAP, tidak kompatibel atau tidak. Jadi, Anda akan bisa segera memulai berbagai implementasi sekarang, sehingga Anda siap menghadapi masalah yang mungkin harus Anda hadapi.