Home » XML » XML Service : SOAP – Pengertian dan Contohnya

XML Service : SOAP – Pengertian dan Contohnya

by Hanifah Nurbaeti
by Hanifah Nurbaeti
  • 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

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 ElementDeskripsi
<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:

ErrorDeskripsi
VersionMismatchMenemukan namespace yang tidak valid untuk elemen SOAP Envelope
MustUnderstandElemen turunan langsung dari elemen Header, dengan atribut mustUnderstand disetel ke “1”, tidak dipahami
ClientFormat pesan salah atau berisi informasi yang salah
ServerAda 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>

You may also like