tutorial pengembangan web terbaru
 

XML Soap


  • SOAP singkatan Simple Object Access P rotocol
  • 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?

Hal ini penting untuk aplikasi web untuk dapat berkomunikasi melalui Internet.

Cara terbaik untuk berkomunikasi antara aplikasi adalah melalui HTTP, karena HTTP didukung oleh semua browser internet dan server. SOAP diciptakan untuk mencapai hal ini.

SOAP menyediakan cara untuk berkomunikasi antara aplikasi yang berjalan pada sistem operasi yang berbeda, dengan teknologi yang berbeda dan bahasa pemrograman.


SOAP Building Blocks

Sebuah pesan SOAP adalah sebuah dokumen XML yang biasa mengandung unsur-unsur berikut:

  • Sebuah elemen Envelope yang mengidentifikasi dokumen XML sebagai pesan SOAP
  • Unsur header yang berisi informasi header
  • Unsur Tubuh yang berisi panggilan dan respon informasi
  • Unsur kesalahan yang mengandung kesalahan dan informasi status

Semua elemen di atas dinyatakan dalam namespace default untuk amplop SOAP:

http://www.w3.org/2003/05/soap-envelope/

dan namespace default untuk SOAP encoding dan tipe data adalah:

http://www.w3.org/2003/05/soap-encoding


Aturan sintaks

Berikut adalah beberapa aturan sintaks penting:

  • Sebuah pesan SOAP HARUS dikodekan menggunakan XML
  • Sebuah pesan SOAP HARUS menggunakan SOAP Envelope namespace
  • Sebuah pesan SOAP HARUS menggunakan SOAP Encoding namespace
  • Sebuah pesan SOAP TIDAK harus berisi referensi DTD
  • Sebuah pesan SOAP TIDAK harus berisi Instruksi XML Processing

Skeleton SOAP Pesan

<?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>

SOAP Envelope Element

Unsur 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: sabun Namespace

Perhatikan xmlns: namespace sabun dalam contoh di atas. Ini harus selalu memiliki nilai: "http://www.w3.org/2003/05/soap-envelope/" .

namespace mendefinisikan Amplop sebagai Envelope SOAP.

Jika namespace yang berbeda digunakan, aplikasi menghasilkan kesalahan dan membuang pesan tersebut.


The encodingStyle Atribut

The encodingStyle atribut digunakan untuk mendefinisikan jenis data yang digunakan dalam dokumen. atribut ini dapat muncul pada elemen SOAP, dan berlaku untuk isi elemen dan semua elemen anak.

Sebuah pesan SOAP tidak memiliki encoding 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>

SOAP header Element

Opsional SOAP header elemen berisi informasi aplikasi-spesifik (like authentication, payment, etc) tentang pesan SOAP.

Jika elemen Header hadir, itu harus menjadi elemen anak pertama dari elemen Envelope.

Note: Semua elemen anak langsung dari elemen header harus namespace-kualifikasi.

<?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="http://www.w3ii.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

Contoh di atas mengandung header dengan "Trans" elemen, sebuah "mustUnderstand" atribut dengan nilai 1, dan nilai 234.

SOAP mendefinisikan tiga atribut dalam namespace default. Atribut-atribut ini adalah: mustUnderstand, aktor, dan encodingStyle.

Atribut didefinisikan di header SOAP mendefinisikan bagaimana penerima harus memproses pesan SOAP.


The mustUnderstand Atribut

Atribut SOAP mustUnderstand dapat digunakan untuk menunjukkan apakah suatu header entri adalah wajib atau opsional bagi penerima untuk memproses.

Jika Anda menambahkan mustUnderstand = "1" untuk elemen anak dari elemen header ini menunjukkan bahwa penerima pengolahan Header harus mengakui elemen. 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="http://www.w3ii.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

The actor Atribut

Sebuah pesan SOAP mungkin perjalanan dari pengirim ke penerima dengan melewati titik akhir yang berbeda sepanjang jalur pesan. Namun, tidak semua bagian dari pesan SOAP mungkin dimaksudkan untuk endpoint utama, sebaliknya, hal itu mungkin dimaksudkan untuk satu atau lebih dari titik akhir di jalan pesan.

Atribut aktor SOAP digunakan untuk mengatasi elemen Header 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="http://www.w3ii.com/transaction/"
  soap:actor="http://www.w3ii.com/appml/">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

The encodingStyle Atribut

The encodingStyle atribut digunakan untuk mendefinisikan jenis data yang digunakan dalam dokumen. atribut ini dapat muncul pada elemen SOAP, dan itu akan berlaku untuk isi elemen dan semua elemen anak.

Sebuah pesan SOAP tidak memiliki encoding default.

Sintaksis

soap:encodingStyle="URI"

SOAP Elemen Tubuh

Tubuh SOAP elemen yang diperlukan berisi pesan SOAP yang sebenarnya ditujukan untuk endpoint akhir dari pesan.

elemen anak langsung dari elemen SOAP Tubuh mungkin namespace-kualifikasi.

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="http://www.w3ii.com/prices">
    <m:Item>Apples</m:Item>
  </m:GetPrice>
</soap:Body>

</soap:Envelope>

Contoh di atas meminta harga apel. Perhatikan bahwa m: getPrice dan unsur-unsur Barang di atas adalah elemen khusus aplikasi. Mereka bukan bagian dari SOAP namespace.

Sebuah respon 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="http://www.w3ii.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>


SOAP Sesar Element

Opsional SOAP Sesar elemen digunakan untuk menunjukkan pesan kesalahan.

SOAP Sesar elemen memegang kesalahan dan status informasi untuk pesan SOAP.

Jika elemen Patahan hadir, itu harus muncul sebagai elemen anak dari elemen tubuh. Unsur kesalahan hanya dapat muncul sekali dalam pesan SOAP.

Unsur SOAP Sesar memiliki sub unsur-unsur berikut:

sub Elemen Deskripsi
<faultcode> Sebuah kode untuk mengidentifikasi kesalahan
<faultstring> Penjelasan dibaca manusia dari kesalahan
<faultactor> Informasi tentang siapa yang menyebabkan kesalahan terjadi
<detail>

Memegang aplikasi tertentu kesalahan informasi yang berhubungan dengan elemen Tubuh

Kode SOAP Sesar

Nilai-nilai faultcode didefinisikan di bawah harus digunakan dalam elemen faultcode saat menjelaskan kesalahan:

Kesalahan Deskripsi
VersionMismatch Menemukan sebuah namespace valid untuk elemen SOAP Envelope
MustUnderstand Sebuah elemen anak langsung dari elemen Header, dengan mustUnderstand atribut set ke "1" , tidak dipahami
Client Pesan itu tidak benar dibentuk atau berisi informasi yang tidak benar
Server Ada masalah dengan server sehingga pesan tidak bisa melanjutkan

HTTP Protocol

HTTP berkomunikasi melalui TCP / IP. Klien HTTP terhubung ke server HTTP menggunakan TCP. Setelah membuat sambungan, 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 respon HTTP kembali ke klien. Tanggapan berisi kode status yang menunjukkan status permintaan:

200 OK
Content-Type: text/plain
Content-Length: 200

Dalam contoh di atas, server kembali kode status 200. Ini adalah standar kode sukses untuk HTTP.

Jika server tidak bisa decode permintaan, bisa memiliki kembali sesuatu seperti ini:

400 Bad Request
Content-Length: 0

SOAP Binding

Spesifikasi SOAP mendefinisikan struktur dari pesan SOAP, bukan bagaimana mereka dipertukarkan. Kesenjangan ini diisi oleh apa yang disebut "SOAP Bindings" . binding SOAP adalah mekanisme yang memungkinkan pesan SOAP untuk secara efektif dipertukarkan menggunakan protokol transport.

Kebanyakan implementasi SOAP menyediakan binding untuk protokol transportasi umum, seperti HTTP atau SMTP.

HTTP adalah sinkron dan banyak digunakan. Permintaan SOAP HTTP menetapkan setidaknya dua header HTTP: Content-Type dan Content-Length.

SMTP adalah asynchronous dan digunakan di resor terakhir atau kasus tertentu.

Implementasi Java dari SOAP biasanya memberikan pengikatan spesifik untuk JMS (Java Messaging System) protokol.


Jenis konten

Header Content-Type untuk permintaan SOAP dan respon mendefinisikan jenis MIME untuk pesan dan pengkodean karakter (optional) digunakan untuk tubuh XML dari permintaan atau respon.

Sintaksis

Content-Type: MIMEType; charset=character-encoding

Contoh

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8

Content-Length

Konten-Panjang header untuk permintaan SOAP dan respon menentukan jumlah byte dalam tubuh permintaan atau respon.

Sintaksis

Content-Length: bytes

Contoh

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

Sebuah Contoh SOAP

Pada contoh di bawah, permintaan GetStockPrice dikirim ke server. Permintaan memiliki parameter StockName, dan parameter Harga yang akan dikembalikan dalam respon. Namespace untuk fungsi tersebut didefinisikan dalam "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>

SOAP respon:

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>