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