Dapatkah beberapa badan menjelaskan kepada saya perbedaan antara gaya Dokumen dan layanan web gaya RPC?
Ada dua model gaya komunikasi yang digunakan untuk menerjemahkan WSDL yang mengikat ke badan pesan SOAP. Mereka adalah:
Dokumen & RPC
The Keuntungan menggunakan model gaya Dokumen adalah bahwa Anda dapat struktur tubuh SOAP cara apapun yang Anda inginkan selama isi badan pesan SOAP adalah setiap contoh XML sewenang-wenang. Gaya Dokumen juga disebut sebagai gaya Berorientasi Pesan .
Namun, dengan model gaya RPC , struktur badan permintaan SOAP harus berisi nama operasi dan set parameter metode. Model gaya RPC mengasumsikan struktur khusus untuk contoh XML yang terdapat dalam badan pesan.
Selain itu, ada dua model penggunaan pengkodean yang digunakan untuk menerjemahkan WSDL yang mengikat ke pesan SOAP. Mereka adalah: literal, dan dikodekan
Saat menggunakan model penggunaan literal , konten isi harus sesuai dengan struktur XML-schema (XSD) yang ditentukan pengguna . Keuntungannya dua kali lipat. Pertama, Anda dapat memvalidasi badan pesan dengan skema XML yang ditentukan pengguna, selain itu, Anda juga dapat mengubah pesan menggunakan bahasa transformasi seperti XSLT.
Dengan model penggunaan yang dienkode (SOAP) , pesan harus menggunakan tipe data XSD, tetapi struktur pesan tidak perlu mengikuti skema XML yang ditentukan pengguna. Hal ini menyulitkan untuk memvalidasi badan pesan atau menggunakan transformasi berbasis XSLT pada badan pesan.
Kombinasi gaya dan model penggunaan yang berbeda memberi kita empat cara berbeda untuk menerjemahkan pengikatan WSDL ke pesan SOAP.
Document/literal
Document/encoded
RPC/literal
RPC/encoded
Saya akan merekomendasikan agar Anda membaca artikel ini yang berjudul Gaya WSDL manakah yang harus saya gunakan? oleh Russell Butek yang memiliki diskusi bagus tentang gaya yang berbeda dan menggunakan model untuk menerjemahkan WSDL yang mengikat ke pesan SOAP, dan kekuatan dan kelemahan relatifnya.
Setelah artefak diterima, dalam kedua gaya komunikasi, saya memanggil metode di pelabuhan. Sekarang, ini tidak berbeda dalam gaya RPC dan gaya Dokumen. Jadi apa perbedaannya dan di manakah perbedaan itu terlihat?
Tempat di mana Anda dapat menemukan perbedaannya adalah "RESPONS"!
Gaya RPC:
package com.sample;
import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.RPC)
public interface StockPrice {
public String getStockPrice(String stockName);
public ArrayList getStockPriceList(ArrayList stockNameList);
}
Pesan SOAP untuk operasi kedua akan memiliki keluaran kosong dan akan terlihat seperti:
Respons Gaya RPC:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return/>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
Gaya Dokumen:
package com.sample;
import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.DOCUMENT)
public interface StockPrice {
public String getStockPrice(String stockName);
public ArrayList getStockPriceList(ArrayList stockNameList);
}
Jika kita menjalankan klien untuk SEI di atas, hasilnya adalah:
123 [123, 456]
Output ini menunjukkan bahwa elemen ArrayList dipertukarkan antara layanan web dan klien. Perubahan ini telah dilakukan hanya dengan mengubah atribut gaya anotasi SOAPBinding. Pesan SOAP untuk metode kedua dengan tipe data yang lebih kaya ditunjukkan di bawah ini sebagai referensi:
Tanggapan Gaya Dokumen:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">123</return>
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">456</return>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
Kesimpulan
- Seperti yang Anda perhatikan dalam dua pesan respons SOAP yang memungkinkan untuk memvalidasi pesan respons SOAP dalam kasus gaya DOKUMEN tetapi tidak dalam layanan web gaya RPC.
- Kerugian dasar menggunakan gaya RPC adalah tidak mendukung tipe data yang lebih kaya dan gaya Dokumen membawa beberapa kompleksitas dalam bentuk XSD untuk mendefinisikan tipe data yang lebih kaya.
- Pilihan untuk menggunakan salah satu dari ini tergantung pada persyaratan operasi / metode dan klien yang diharapkan.
Demikian pula, dalam hal apa SOAP melalui HTTP berbeda dengan XML melalui HTTP? Setelah semua SOAP juga dokumen XML dengan namespace SOAP. Jadi apa bedanya disini?
Mengapa kita membutuhkan standar seperti SOAP? Dengan menukar dokumen XML melalui HTTP, dua program dapat bertukar informasi yang kaya dan terstruktur tanpa pengenalan standar tambahan seperti SOAP untuk menjelaskan secara eksplisit format amplop pesan dan cara untuk menyandikan konten terstruktur.
SOAP menyediakan standar sehingga pengembang tidak perlu membuat format pesan XML kustom untuk setiap layanan yang ingin mereka sediakan. Mengingat tanda tangan metode layanan yang akan dipanggil, spesifikasi SOAP menetapkan format pesan XML yang tidak ambigu. Setiap pengembang yang akrab dengan spesifikasi SOAP, yang bekerja dalam bahasa pemrograman apa pun, dapat merumuskan permintaan SOAP XML yang benar untuk layanan tertentu dan memahami respons dari layanan dengan mendapatkan detail layanan berikut.
- Nama layanan
- Nama metode yang diterapkan oleh layanan
- Tanda tangan metode dari setiap metode
- Alamat implementasi layanan (dinyatakan sebagai URI)
Menggunakan SOAP mempersingkat proses untuk mengekspos komponen perangkat lunak yang ada sebagai layanan Web karena tanda tangan metode layanan mengidentifikasi struktur dokumen XML yang digunakan untuk permintaan dan respons.