Section Artikel
Penting bagi aplikasi web untuk dapat berkomunikasi melalui Internet.
Cara terbaik untuk berkomunikasi antar aplikasi adalah melalui HTTP, karena HTTP didukung oleh semua browser dan server Internet. SOAP diciptakan untuk mencapai ini.
SOAP menyediakan cara untuk berkomunikasi antara aplikasi yang berjalan pada sistem operasi yang berbeda, dengan teknologi dan bahasa pemrograman yang berbeda.
Pesan SOAP adalah dokumen XML biasa yang berisi elemen berikut:
Semua elemen di atas dideklarasikan di namespace default untuk amplop SOAP:
http://www.w3.org/2003/05/soap-envelope/
dan namespace default untuk encoding SOAP dan tipe data adalah:
http://www.w3.org/2003/05/soap-encoding
Berikut beberapa aturan sintaks penting:
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Header> ... </soap:Header> <soap:Body> ... <soap:Fault> ... </soap:Fault> </soap:Body> </soap:Envelope>
Elemen SOAP Envelope yang diperlukan adalah elemen root dari pesan SOAP. Elemen ini mendefinisikan dokumen XML sebagai pesan SOAP.
Contoh :
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> ... Message information goes here ... </soap:Envelope>
Perhatikan namespace xmlns: soap pada contoh di atas. Itu harus selalu memiliki nilai: "http://www.w3.org/2003/05/soap-envelope/".
Namespace mendefinisikan Envelope sebagai SOAP Envelope.
Jika namespace berbeda digunakan, aplikasi menghasilkan kesalahan dan membuang pesan tersebut.
Atribut encodingStyle digunakan untuk menentukan tipe data yang digunakan dalam dokumen. Atribut ini dapat muncul di elemen SOAP apa pun dan berlaku untuk konten elemen dan semua elemen turunan.
Pesan SOAP tidak memiliki pengkodean default.
Sintaks
soap:encodingStyle="URI"
Contoh :
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> ... Message information goes here ... </soap:Envelope>
Elemen SOAP Header opsional berisi informasi khusus aplikasi (seperti otentikasi, pembayaran, dll) tentang pesan SOAP.
Jika elemen Header ada, itu harus menjadi elemen anak pertama dari elemen Envelope.
Catatan: Semua elemen turunan langsung dari elemen Header harus memenuhi syarat namespace.
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Header> <m:Trans xmlns:m="https://www.w3schools.com/transaction/" soap:mustUnderstand="1">234 </m:Trans> </soap:Header> ... ... </soap:Envelope>
Contoh di atas berisi header dengan elemen “Trans”, atribut “mustUnderstand” dengan nilai 1 dan nilai 234.
SOAP mendefinisikan tiga atribut dalam namespace default. Atribut tersebut adalah: mustUnderstand, actor, dan encodingStyle.
Atribut yang ditentukan dalam SOAP Header menentukan bagaimana penerima harus memproses pesan SOAP.
Atribut mustUnderstand SOAP dapat digunakan untuk menunjukkan apakah entri header wajib atau opsional untuk diproses oleh penerima.
Jika kita tambahkan mustUnderstand = “1” ke elemen turunan dari elemen Header, ini menunjukkan bahwa penerima yang memproses Header harus mengenali elemen tersebut. Jika penerima tidak mengenali elemen itu akan gagal saat memproses Header.
Sintaks
soap:mustUnderstand="0|1"
Contoh :
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Header> <m:Trans xmlns:m="https://www.w3schools.com/transaction/" soap:mustUnderstand="1">234 </m:Trans> </soap:Header> ... ... </soap:Envelope>
Pesan SOAP dapat melakukan perjalanan dari pengirim ke penerima dengan melewati titik akhir yang berbeda di sepanjang jalur pesan. Namun, tidak semua bagian dari pesan SOAP dapat ditujukan untuk titik akhir akhir, sebaliknya, pesan tersebut mungkin dimaksudkan untuk satu atau lebih titik akhir di jalur pesan.
Atribut aktor SOAP digunakan untuk mengalamatkan elemen Header ke titik akhir tertentu.
Sintaks
soap:actor="URI"
Contoh :
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Header> <m:Trans xmlns:m="https://www.w3schools.com/transaction/" soap:actor="https://www.w3schools.com/code/">234 </m:Trans> </soap:Header> ... ... </soap:Envelope>
Atribut encodingStyle digunakan untuk menentukan tipe data yang digunakan dalam dokumen. Atribut ini dapat muncul di elemen SOAP apa pun, dan ini akan berlaku untuk konten elemen tersebut dan semua elemen turunan.
Pesan SOAP tidak memiliki pengkodean default.
Sintaks
soap:encodingStyle="URI"
Elemen Body SOAP yang diperlukan berisi pesan SOAP aktual yang ditujukan untuk titik akhir pesan.
Elemen turunan langsung dari elemen Badan SOAP mungkin memenuhi syarat namespace.
Contoh :
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body> <m:GetPrice xmlns:m="https://www.w3schools.com/prices"> <m:Item>Apples</m:Item> </m:GetPrice> </soap:Body> </soap:Envelope>
Contoh di atas meminta harga apel. Perhatikan bahwa elemen m:GetPrice
dan Item di atas adalah elemen khusus aplikasi. Mereka bukan bagian dari namespace SOAP.
Tanggapan SOAP bisa terlihat seperti ini:
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body> <m:GetPriceResponse xmlns:m="https://www.w3schools.com/prices"> <m:Price>1.90</m:Price> </m:GetPriceResponse> </soap:Body> </soap:Envelope>
Elemen Fault SOAP opsional digunakan untuk menunjukkan pesan kesalahan.
Elemen Fault SOAP menyimpan kesalahan dan informasi status untuk pesan SOAP.
Jika ada elemen Fault, itu harus muncul sebagai elemen turunan dari elemen Body. Elemen Kesalahan hanya dapat muncul sekali dalam pesan SOAP.
Elemen SOAP Fault memiliki sub elemen berikut:
Sub Element | Deskripsi |
---|---|
<faultcode> | Kode untuk mengidentifikasi kesalahan |
<faultstring> | Penjelasan kesalahan yang bisa dibaca manusia |
<faultactor> | Informasi tentang siapa yang menyebabkan kesalahan terjadi |
<detail> | Menyimpan informasi kesalahan khusus aplikasi yang terkait dengan elemen Body |
Nilai kode kesalahan yang ditentukan di bawah ini harus digunakan dalam elemen kode fault saat menjelaskan kesalahan:
Error | Deskripsi |
---|---|
VersionMismatch | Menemukan namespace yang tidak valid untuk elemen SOAP Envelope |
MustUnderstand | Elemen turunan langsung dari elemen Header, dengan atribut mustUnderstand disetel ke “1”, tidak dipahami |
Client | Format pesan salah atau berisi informasi yang salah |
Server | Ada masalah dengan server sehingga pesan tidak dapat dilanjutkan |
HTTP berkomunikasi melalui TCP / IP. Klien HTTP terhubung ke server HTTP menggunakan TCP. Setelah membuat koneksi, klien dapat mengirim pesan permintaan HTTP ke server:
POST /item HTTP/1.1 Host: 189.123.255.239 Content-Type: text/plain Content-Length: 200
Server kemudian memproses permintaan dan mengirimkan respons HTTP kembali ke klien. Respons berisi kode status yang menunjukkan status permintaan:
200 OK Content-Type: text/plain Content-Length: 200
Pada contoh di atas, server mengembalikan kode status 200. Ini adalah kode sukses standar untuk HTTP.
Jika server tidak dapat memecahkan kode permintaan, itu bisa saja mengembalikan sesuatu seperti ini:
400 Bad Request Content-Length: 0
Spesifikasi SOAP mendefinisikan struktur pesan SOAP, bukan bagaimana pesan tersebut dipertukarkan. Celah ini diisi oleh apa yang disebut “SOAP Bindings”. Binding SOAP adalah mekanisme yang memungkinkan pesan SOAP untuk dipertukarkan secara efektif menggunakan protokol transport.
Kebanyakan implementasi SOAP menyediakan binding untuk protokol transport umum, seperti HTTP atau SMTP.
HTTP sinkron dan banyak digunakan. Permintaan SOAP HTTP menentukan setidaknya dua header HTTP: Content-Type dan Content-Length.
SMTP tidak sinkron dan digunakan dalam upaya terakhir atau kasus tertentu.
Implementasi SOAP Java biasanya menyediakan pengikatan khusus untuk protokol JMS (Java Messaging System).
Header Tipe-Konten untuk permintaan dan respons SOAP menentukan tipe MIME untuk pesan dan pengkodean karakter (opsional) yang digunakan untuk badan XML permintaan atau respons.
Sintaks
Content-Type: MIMEType; charset=character-encoding
Contoh :
POST /item HTTP/1.1 Content-Type: application/soap+xml; charset=utf-8
Header panjang konten untuk permintaan dan respons SOAP menentukan jumlah byte dalam tubuh permintaan atau respons.
Sintaks
Content-Length: bytes
Contoh :
POST /item HTTP/1.1 Content-Type: application/soap+xml; charset=utf-8 Content-Length: 250
Dalam contoh di bawah ini, permintaan GetStockPrice dikirim ke server. Permintaan tersebut memiliki parameter StockName, dan parameter Harga yang akan dikembalikan dalam respons. Ruang nama untuk fungsi ini ditentukan di “http://www.example.org/stock”.
Request SOAP:
POST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body xmlns:m="http://www.example.org/stock"> <m:GetStockPrice> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope>
Response SOAP
HTTP/1.1 200 OK Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body xmlns:m="http://www.example.org/stock"> <m:GetStockPriceResponse> <m:Price>34.5</m:Price> </m:GetStockPriceResponse> </soap:Body> </soap:Envelope>