sabun XML
- SOAP adalah singkatan dari S imple O bject A ccess P protokol
- SOAP adalah protokol komunikasi aplikasi
- SOAP adalah format untuk mengirim dan menerima pesan
- SOAP adalah platform independen
- SOAP didasarkan pada XML
- SOAP adalah rekomendasi W3C
Mengapa SABUN?
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 hal ini.
SOAP menyediakan cara untuk berkomunikasi antara aplikasi yang berjalan pada sistem operasi yang berbeda, dengan teknologi dan bahasa pemrograman yang berbeda.
Blok Bangunan SOAP
Pesan SOAP adalah dokumen XML biasa yang berisi elemen-elemen berikut:
- Elemen Amplop yang mengidentifikasi dokumen XML sebagai pesan SOAP
- Elemen Header yang berisi informasi header
- Elemen Tubuh yang berisi informasi panggilan dan respons
- Elemen Kesalahan yang berisi kesalahan dan informasi status
Semua elemen di atas dideklarasikan dalam namespace default untuk amplop SOAP:
http://www.w3.org/2003/05/soap-envelope/
dan namespace default untuk pengkodean SOAP dan tipe data adalah:
http://www.w3.org/2003/05/soap-encoding
Aturan Sintaks
Berikut adalah beberapa aturan sintaks penting:
- Pesan SOAP HARUS dikodekan menggunakan XML
- Pesan SOAP HARUS menggunakan namespace SOAP Envelope
- Pesan SOAP TIDAK boleh mengandung referensi DTD
- Pesan SOAP TIDAK boleh berisi Instruksi Pemrosesan XML
Pesan SOAP Kerangka
<?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 Amplop SOAP
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>
xmlns:soap Namespace
Perhatikan ruang nama 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 yang berbeda digunakan, aplikasi menghasilkan kesalahan dan membuang pesan.
Atribut EncodingStyle
Atribut encodingStyle digunakan untuk mendefinisikan tipe data yang digunakan dalam dokumen. Atribut ini dapat muncul pada elemen SOAP apa pun, dan berlaku untuk konten elemen dan semua elemen turunan.
Pesan SOAP tidak memiliki penyandian default.
Sintaksis
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 Judul SOAP
Elemen Header SOAP 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 didefinisikan dalam SOAP Header mendefinisikan bagaimana penerima harus memproses pesan SOAP.
Atribut yang Harus Dipahami
Atribut SOAP mustUnderstand dapat digunakan untuk menunjukkan apakah entri header adalah wajib atau opsional untuk diproses oleh penerima.
Jika Anda menambahkan 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.
Sintaksis
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>
Atribut aktor
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 mungkin ditujukan untuk titik akhir akhir, sebaliknya, mungkin ditujukan untuk satu atau lebih titik akhir di jalur pesan.
Atribut aktor SOAP digunakan untuk mengalamatkan elemen Header ke titik akhir tertentu.
Sintaksis
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
Atribut encodingStyle digunakan untuk mendefinisikan tipe data yang digunakan dalam dokumen. Atribut ini dapat muncul pada elemen SOAP apa pun, dan itu akan berlaku untuk konten elemen itu dan semua elemen turunan.
Pesan SOAP tidak memiliki penyandian default.
Sintaksis
soap:encodingStyle="URI"
Elemen Tubuh SOAP
Elemen SOAP Body yang diperlukan berisi pesan SOAP aktual yang ditujukan untuk titik akhir 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 m:GetPrice dan elemen Item di atas adalah elemen khusus aplikasi. Mereka bukan bagian dari namespace SOAP.
Respons SOAP dapat 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 Kesalahan SOAP
Elemen kesalahan SOAP opsional digunakan untuk menunjukkan pesan kesalahan.
Elemen Kesalahan SOAP menyimpan kesalahan dan informasi status untuk pesan SOAP.
Jika ada elemen Fault, elemen tersebut harus muncul sebagai elemen turunan dari elemen Body. Elemen Fault hanya dapat muncul sekali dalam pesan SOAP.
Elemen Kesalahan SOAP memiliki sub elemen berikut:
Sub Element | Description |
---|---|
<faultcode> | A code for identifying the fault |
<faultstring> | A human readable explanation of the fault |
<faultactor> | Information about who caused the fault to happen |
<detail> |
Holds application specific error information related to the Body element |
Kode Kesalahan SOAP
Nilai kode kesalahan yang ditentukan di bawah ini harus digunakan dalam elemen kode kesalahan saat menjelaskan kesalahan:
Error | Description |
---|---|
VersionMismatch | Found an invalid namespace for the SOAP Envelope element |
MustUnderstand | An immediate child element of the Header element, with the mustUnderstand attribute set to "1", was not understood |
Client | The message was incorrectly formed or contained incorrect information |
Server | There was a problem with the server so the message could not proceed |
Protokol HTTP
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 mengembalikan sesuatu seperti ini:
400 Bad Request
Content-Length: 0
Pengikatan SOAP
Spesifikasi SOAP mendefinisikan struktur pesan SOAP, bukan bagaimana mereka dipertukarkan. Kesenjangan ini diisi oleh apa yang disebut "SOAP Bindings". Ikatan SOAP adalah mekanisme yang memungkinkan pesan SOAP 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 HTTP SOAP menentukan setidaknya dua header HTTP: Content-Type dan Content-Length.
SMTP tidak sinkron dan digunakan dalam upaya terakhir atau kasus tertentu.
Implementasi Java dari SOAP biasanya menyediakan pengikatan khusus untuk protokol JMS (Java Messaging System).
Jenis konten
Header Tipe Konten untuk permintaan dan respons SOAP mendefinisikan tipe MIME untuk pesan dan pengkodean karakter (opsional) yang digunakan untuk badan XML permintaan atau respons.
Sintaksis
Content-Type: MIMEType; charset=character-encoding
Contoh
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Konten-Panjang
Header Content-Length untuk permintaan dan respons SOAP menentukan jumlah byte dalam isi permintaan atau respons.
Sintaksis
Content-Length: bytes
Contoh
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250
Contoh SOAP
Pada contoh di bawah, permintaan GetStockPrice dikirim ke server. Permintaan memiliki parameter StockName, dan parameter Harga yang akan dikembalikan sebagai respons. Ruang nama untuk fungsi didefinisikan di "http://www.example.org/stock".
Permintaan 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>
Tanggapan 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>