- SOAP adalah singkatan dari Simple Object Access Protocol
- 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
Section Artikel
- 1 Mengapa SOAP?
- 2 Balok Penyusun SOAP
- 3 Aturan Sintaks
- 4 Pesan SOAP Skeleton
- 5 Elemen Envelope SOAP
- 6 Namespace xmlns:soap
- 7 Atribut encodingStyle
- 8 Elemen Header SOAP
- 9 Atribut mustUnderstand
- 10 Atribut aktor
- 11 Atribut encodingStyle
- 12 Elemen Body SOAP
- 13 Elemen Fault SOAP
- 14 Protokol HTTP
- 15 SOAP Binding
- 16 Jenis konten
- 17 Panjang Konten
- 18 Contoh SOAP
Mengapa SOAP?
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.
Balok Penyusun SOAP
Pesan SOAP adalah dokumen XML biasa yang berisi elemen berikut:
- Elemen Envelope yang mengidentifikasi dokumen XML sebagai pesan SOAP
- Elemen Header yang berisi informasi header
- Elemen Tubuh yang berisi informasi panggilan dan respons
- Sebuah elemen Kesalahan yang mengandung kesalahan dan informasi status
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
Aturan Sintaks
Berikut beberapa aturan sintaks penting:
- Pesan SOAP HARUS dienkode menggunakan XML
- Pesan SOAP HARUS menggunakan namespace SOAP Envelope
- Pesan SOAP TIDAK boleh berisi referensi DTD
- Pesan SOAP TIDAK boleh berisi Instruksi Pemrosesan XML
Pesan SOAP Skeleton
<?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 Envelope 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>
Namespace xmlns:soap
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
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 Header SOAP
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
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>
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 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
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
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
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 |
Kode Fault SOAP
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 |
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 saja mengembalikan sesuatu seperti ini:
400 Bad Request Content-Length: 0
SOAP Binding
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).
Jenis konten
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
Panjang Konten
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
Contoh SOAP
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>