Pertanyaan Apa perbedaan antara gaya dokumen dan komunikasi gaya RPC?


Dapatkah seseorang menjelaskan kepada saya perbedaan antara dokumen dan web services RPC? Selain JAX-RPC, versi berikutnya adalah JAX-WS, yang mendukung gaya Dokumen dan RPC. Saya juga memahami gaya dokumen web services dimaksudkan untuk komunikasi Asynchronous di mana klien tidak akan memblokir sampai respon diterima.

Either way, menggunakan JAX-WS Saya saat ini membubuhi keterangan layanan dengan @Layanan web, menghasilkan WSDL dan dari WSDL itu saya menghasilkan artefak sisi klien.

Setelah artefak diterima, dalam kedua gaya, saya memanggil metode pada port. Sekarang, ini tidak berbeda dalam gaya RPC dan gaya Dokumen. Jadi apa bedanya dan di mana perbedaan itu terlihat?

Demikian pula, dengan cara apa SOAP melalui HTTP berbeda dari XML melalui HTTP? Setelah semua SOAP juga dokumen XML dengan namespace SOAP.


76
2018-01-30 10:31


asal


Jawaban:


Dapatkah beberapa orang menjelaskan kepada saya perbedaan antara gaya Dokumen dan   RPC style webservices?

Ada dua model gaya komunikasi yang digunakan untuk menerjemahkan pengikatan WSDL ke badan pesan SOAP. Mereka:   Dokumen & RPC

Itu keuntungan menggunakan model gaya Dokumen adalah Anda dapat menyusun struktur SOAP dengan cara apa pun yang Anda inginkan selama konten badan pesan SOAP adalah contoh XML acak. Gaya Dokumen juga disebut sebagai Gaya Berorientasi Pesan.

Namun, dengan sebuah Model gaya RPC, struktur badan permintaan SOAP harus berisi nama operasi dan kumpulan parameter metode. Model gaya RPC mengasumsikan struktur khusus untuk Instance XML terkandung dalam tubuh pesan.

Selanjutnya, ada dua model penggunaan pengkodean yang digunakan untuk menerjemahkan pengikatan WSDL ke pesan SOAP. Mereka: literal, dan dikodekan

Saat menggunakan model penggunaan literal, isi tubuh harus sesuai dengan definisi pengguna Struktur XML-skema (XSD). Keuntungannya dua kali lipat. Untuk satu, Anda dapat memvalidasi tubuh pesan dengan skema XML yang ditentukan pengguna, selain itu, Anda juga dapat mengubah pesan menggunakan bahasa transformasi seperti XSLT.

Dengan (SOAP) model penggunaan yang dikodekan, pesan harus menggunakan tipe data XSD, tetapi struktur pesan tidak perlu sesuai dengan skema XML yang ditentukan pengguna. Ini menyulitkan validasi isi 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 Anda membaca artikel ini yang berjudul Gaya WSDL apa yang harus saya gunakan? oleh Russell Butek yang memiliki diskusi bagus tentang gaya yang berbeda dan menggunakan model untuk menerjemahkan WSDL yang mengikat pesan SOAP, dan kekuatan dan kelemahan relatif mereka.

Setelah artefak diterima, dalam kedua gaya komunikasi, saya   aktifkan metode di port. Sekarang, ini tidak berbeda dalam gaya RPC   dan Gaya dokumen. Jadi apa bedanya dan di mana itu   perbedaan terlihat?

Tempat di mana Anda dapat menemukan perbedaannya adalah "RESPON"!

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 output 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 dari anotasi SOAPBinding. Pesan SOAP untuk metode kedua dengan tipe data lebih kaya ditunjukkan di bawah ini sebagai referensi:

Respons 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 bahwa dimungkinkan untuk memvalidasi pesan respons SOAP dalam hal gaya DOCUMENT tetapi tidak dalam layanan web gaya RPC.
  • Dasar Kerugian menggunakan gaya RPC itu tidak mendukung tipe data yang lebih kaya dan menggunakan style Document adalah itu membawa beberapa kompleksitas dalam bentuk XSD untuk mendefinisikan yang lebih kaya tipe data.
  • Pilihan menggunakan salah satu dari ini tergantung pada persyaratan operasi / metode dan klien yang diharapkan.

Demikian pula, cara SOAP melalui HTTP berbeda dari XML melalui HTTP? Setelah   semua SOAP juga dokumen XML dengan namespace SOAP. Jadi apa itu   perbedaan di sini?

Mengapa kita membutuhkan standar seperti SOAP? Dengan bertukar dokumen XML melalui HTTP, dua program dapat bertukar informasi yang kaya dan terstruktur tanpa pengenalan standar tambahan seperti SOAP untuk secara eksplisit menggambarkan format amplop pesan dan cara untuk menyandikan konten terstruktur.

SOAP menyediakan standar sehingga pengembang tidak perlu menciptakan format pesan XML kustom untuk setiap layanan yang ingin mereka sediakan. Mengingat tanda tangan dari metode layanan yang akan dipanggil, spesifikasi SOAP menentukan format pesan XML yang tidak ambigu. Setiap pengembang yang akrab dengan spesifikasi SOAP, yang bekerja dalam bahasa pemrograman apa pun, dapat memformulasikan permintaan SOAP XML yang benar untuk layanan tertentu dan memahami respons dari layanan dengan mendapatkan rincian layanan berikut.

  • Nama layanan
  • Nama metode diimplementasikan oleh layanan
  • Metode tanda tangan dari masing-masing metode
  • Alamat implementasi layanan (dinyatakan sebagai URI)

Menggunakan SOAP mengefektifkan proses untuk mengekspos komponen perangkat lunak yang ada sebagai layanan Web karena tanda tangan metode layanan mengidentifikasi struktur dokumen XML yang digunakan baik untuk permintaan dan respons.


81
2018-02-04 13:23



Layanan web gaya RPC menggunakan nama-nama metode dan parameternya untuk menghasilkan struktur XML yang mewakili tumpukan panggilan metode. Gaya dokumen menunjukkan tubuh SOAP berisi dokumen XML yang dapat divalidasi terhadap dokumen skema XML yang telah ditentukan sebelumnya.

Titik awal yang baik: SOAP Binding: Perbedaan antara Dokumen dan RPC Style Web Services


21
2018-05-20 09:07



Dalam definisi WSDL, bindings berisi operasi, inilah gaya untuk setiap operasi.

Dokumen : Dalam file WSDL, itu menentukan rincian jenis baik memiliki inline Atau impor dokumen XSD, yang menggambarkan struktur (yaitu skema) dari tipe data kompleks yang ditukar oleh metode-metode layanan yang membuat digabungkan secara longgar. Gaya dokumen adalah default.

  • Keuntungan:
    • Dengan menggunakan gaya Dokumen ini, kita dapat memvalidasi pesan SOAP terhadap skema yang telah ditentukan sebelumnya. Ini mendukung tipe data dan pola xml.
    • Hubungan renggang.
  • Kerugian: Agak sulit untuk mengerti.

Dalam elemen tipe WSDL terlihat sebagai berikut:

<types>
 <xsd:schema>
  <xsd:import schemaLocation="http://localhost:9999/ws/hello?xsd=1" namespace="http://ws.peter.com/"/>
 </xsd:schema>
</types>

Skema ini mengimpor dari referensi eksternal.

RPC : Dalam file WSDL, itu tidak menciptakan skema tipe, dalam elemen pesan itu mendefinisikan atribut nama dan jenis yang membuat digabungkan erat.

<types/>  
<message name="getHelloWorldAsString">  
<part name="arg0" type="xsd:string"/>  
</message>  
<message name="getHelloWorldAsStringResponse">  
<part name="return" type="xsd:string"/>  
</message>  
  • Keuntungan: Mudah dimengerti.
  • Kerugian:
    • kami tidak dapat memvalidasi pesan SOAP.
    • erat digabungkan

RPC: Tidak ada tipe dalam WSDL
Dokumen: Bagian jenis akan tersedia dalam WSDL


14
2018-02-09 10:23



Skenario utama di mana JAX-WS RPC dan Dokumen gaya digunakan sebagai berikut:

  • Itu Remote Procedure Call (RPC) pola digunakan ketika konsumen melihat layanan web sebagai aplikasi logis tunggal atau komponen dengan data yang dienkapsulasi. Permintaan dan respons pesan memetakan langsung ke parameter input dan output dari panggilan prosedur.

    Contoh dari jenis ini pola RPC mungkin termasuk layanan pembayaran atau layanan penawaran saham.

  • Itu pola berbasis dokumen digunakan dalam situasi di mana konsumen memandang layanan web sebagai proses bisnis yang berjalan lebih lama di mana dokumen permintaan mewakili satu kesatuan lengkap informasi. Jenis layanan web ini mungkin melibatkan interaksi manusia untuk contoh seperti dokumen permohonan permohonan kredit dengan dokumen tanggapan yang berisi tawaran dari lembaga pemberi pinjaman. Karena proses bisnis yang berjalan lebih lama tidak dapat segera mengembalikan dokumen yang diminta, pola berbasis dokumen lebih umum ditemukan dalam arsitektur komunikasi asynchronous. Variasi dokumen / literal dari SOAP digunakan untuk mengimplementasikan pola layanan web berbasis dokumen.


6
2017-10-27 17:27



Saya pikir apa yang Anda tanyakan adalah perbedaan antara RPC Literal, Document Literal dan dokumen SOAP layanan web.

Perhatikan bahwa layanan web Dokumen digambarkan secara literal dan dibungkus juga dan mereka berbeda - salah satu perbedaan utama adalah bahwa yang terakhir adalah BP 1.1 compliant dan yang pertama tidak.

Juga, dalam Dokumen Literal operasi yang akan dipanggil tidak ditentukan dalam hal namanya sedangkan di Dibungkus, itu. Ini, saya pikir, adalah perbedaan yang signifikan dalam hal dengan mudah mencari tahu nama operasi yang digunakan untuk permintaan itu.

Dalam hal RPC literal versus Dokumen Dibungkus, permintaan dibungkus Dokumen dapat dengan mudah diperiksa / divalidasi terhadap skema di WSDL - satu keuntungan besar.

Saya akan menyarankan menggunakan Dokumen Dibungkus sebagai jenis layanan web pilihan karena kelebihannya.

SOAP pada HTTP adalah protokol SOAP yang terikat ke HTTP sebagai operator. SOAP bisa lebih dari SMTP atau XXX juga. SOAP menyediakan cara interaksi antara entitas (klien dan server, misalnya) dan kedua entitas dapat marshal argumen operasi / mengembalikan nilai sesuai semantik protokol.

Jika Anda menggunakan XML melalui HTTP (dan Anda bisa), itu hanya dipahami sebagai muatan XML pada permintaan HTTP / respons. Anda perlu menyediakan kerangka kerja untuk marshal / unmarshal, penanganan kesalahan dan sebagainya.

Tutorial terperinci dengan contoh-contoh WSDL dan kode dengan penekanan pada Java: SOAP dan JAX-WS, RPC versus Layanan Web Dokumen


3
2017-12-22 08:38