Câu hỏi Sự khác biệt giữa phong cách tài liệu và giao tiếp kiểu RPC là gì?


Ai đó có thể giải thích cho tôi sự khác biệt giữa tài liệu web và RPC phong cách dịch vụ? Ngoài JAX-RPC, phiên bản tiếp theo là JAX-WS, hỗ trợ cả kiểu dáng Document và RPC. Tôi cũng hiểu các dịch vụ web kiểu tài liệu có nghĩa là cho giao tiếp không đồng bộ khi một khách hàng sẽ không chặn cho đến khi nhận được phản hồi.

Dù bằng cách nào, bằng cách sử dụng JAX-WS, tôi hiện đang chú thích dịch vụ bằng @Webservice, tạo WSDL và từ WSDL đó tôi tạo ra các tạo phẩm phía máy khách.

Khi các hiện vật được nhận, trong cả hai kiểu, tôi gọi phương thức trên cổng. Bây giờ, điều này không khác biệt về phong cách RPC và kiểu tài liệu. Vậy sự khác biệt và sự khác biệt đó có thể nhìn thấy ở đâu?

Tương tự, SOAP trên HTTP khác với cách nào so với XML qua HTTP? Sau khi tất cả SOAP cũng là tài liệu XML với không gian tên SOAP.


76
2018-01-30 10:31


gốc


có thể trùng lặp Dịch vụ web dựa trên tài liệu hoặc RPC - skaffman


Các câu trả lời:


Có thể một số cơ thể giải thích cho tôi sự khác biệt giữa kiểu Tài liệu và   RPC webservices phong cách?

Có hai mô hình kiểu giao tiếp được sử dụng để dịch một WSDL liên kết với một thông báo SOAP. Họ đang:   Tài liệu & RPC

Các lợi thế của việc sử dụng mô hình kiểu tài liệu là bạn có thể cấu trúc cơ thể SOAP theo bất kỳ cách nào bạn muốn nó miễn là nội dung của thân thông điệp SOAP là bất kỳ cá thể XML tùy ý nào. Kiểu tài liệu cũng được gọi là Kiểu định hướng thư.

Tuy nhiên, với một Mô hình kiểu RPC, cấu trúc của phần thân yêu cầu SOAP phải chứa cả tên hoạt động và tập các tham số phương thức. Mô hình kiểu RPC giả định một cấu trúc cụ thể cho Ví dụ XML chứa trong nội dung thư.

Hơn nữa, có hai mô hình sử dụng mã hóa được sử dụng để dịch một WSDL ràng buộc với một thông báo SOAP. Họ đang: chữ và được mã hóa

Khi sử dụng một mô hình sử dụng theo nghĩa đen, nội dung nội dung phải phù hợp với người dùng xác định Cấu trúc lược đồ XML (XSD). Lợi thế là hai lần. Đối với một, bạn có thể xác nhận hợp lệ nội dung thư với lược đồ XML do người dùng định nghĩa, hơn nữa, bạn cũng có thể chuyển đổi thông báo bằng cách sử dụng ngôn ngữ chuyển đổi như XSLT.

Với một (SOAP) -mô hình sử dụng mã hóa, thông báo phải sử dụng các kiểu dữ liệu XSD, nhưng cấu trúc của thông báo không cần phải phù hợp với bất kỳ lược đồ XML do người dùng định nghĩa nào. Điều này gây khó khăn cho việc xác thực nội dung thư hoặc sử dụng các phép biến đổi dựa trên XSLT trên nội dung thư.

Sự kết hợp của các kiểu dáng và kiểu sử dụng khác nhau cho chúng ta bốn cách khác nhau để dịch một WSDL gắn kết với một thông điệp SOAP.

Document/literal
Document/encoded
RPC/literal
RPC/encoded

Tôi khuyên bạn nên đọc bài viết này có tựa đề Tôi nên sử dụng kiểu WSDL nào? bởi Russell Butek có một cuộc thảo luận tốt đẹp về phong cách khác nhau và sử dụng các mô hình để dịch một WSDL ràng buộc với một thông điệp SOAP, và điểm mạnh và điểm yếu tương đối của chúng.

Một khi các hiện vật được nhận, trong cả hai kiểu giao tiếp, tôi   gọi phương thức trên cổng. Bây giờ, điều này không khác biệt trong phong cách RPC   và kiểu tài liệu. Vậy sự khác biệt là gì và ở đâu   sự khác biệt có thể nhìn thấy?

Nơi bạn có thể tìm thấy sự khác biệt là "RESPONSE"!

Kiểu 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); 
}

Thông báo SOAP cho hoạt động thứ hai sẽ có đầu ra trống và sẽ trông giống như sau:

Phản hồi kiểu RPC:

<ns2:getStockPriceListResponse 
       xmlns:ns2="http://sample.com/">
    <return/>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>

Kiểu tài liệu:

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);
}

Nếu chúng ta chạy máy khách cho SEI ở trên, đầu ra là:

123 [123, 456]

Đầu ra này cho thấy rằng các phần tử ArrayList đang được trao đổi giữa dịch vụ web và ứng dụng khách. Sự thay đổi này chỉ được thực hiện bằng cách thay đổi thuộc tính style của chú thích SOAPBinding. Thông báo SOAP cho phương thức thứ hai với kiểu dữ liệu phong phú hơn được hiển thị bên dưới để tham khảo:

Phản hồi kiểu tài liệu:

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

Phần kết luận

  • Như bạn đã chú ý trong hai thông điệp phản hồi SOAP, có thể xác thực thông điệp phản hồi SOAP trong trường hợp kiểu DOCUMENT nhưng không phải trong các dịch vụ web kiểu RPC.
  • Cơ bản bất lợi khi sử dụng kiểu RPC là nó không hỗ trợ các kiểu dữ liệu phong phú hơn và sử dụng kiểu tài liệu là nó mang lại một số phức tạp dưới dạng XSD để xác định phong phú hơn loai du lieu.
  • Lựa chọn sử dụng một trong số này phụ thuộc vào yêu cầu hoạt động / phương pháp và khách hàng dự kiến.

Tương tự, SOAP qua HTTP khác với XML qua HTTP như thế nào? Sau   tất cả SOAP cũng là tài liệu XML với không gian tên SOAP. Vậy cái gì là   sự khác biệt ở đây?

Tại sao chúng ta cần một tiêu chuẩn như SOAP? Bằng cách trao đổi các tài liệu XML qua HTTP, hai chương trình có thể trao đổi thông tin có cấu trúc phong phú mà không cần giới thiệu một tiêu chuẩn bổ sung như SOAP để mô tả rõ ràng định dạng phong bì thư và cách mã hóa nội dung có cấu trúc.

SOAP cung cấp một tiêu chuẩn để các nhà phát triển không phải phát minh ra một định dạng thông điệp XML tùy chỉnh cho mọi dịch vụ mà họ muốn cung cấp. Do chữ ký của phương thức dịch vụ được gọi, đặc tả SOAP quy định một định dạng thông báo XML rõ ràng. Bất kỳ nhà phát triển nào quen thuộc với đặc tả SOAP, làm việc trong bất kỳ ngôn ngữ lập trình nào, có thể xây dựng một yêu cầu XML SOAP chính xác cho một dịch vụ cụ thể và hiểu phản hồi từ dịch vụ bằng cách lấy các chi tiết dịch vụ sau.

  • Tên dịch vụ
  • Tên phương thức do dịch vụ triển khai
  • Chữ ký phương thức của từng phương thức
  • Địa chỉ thực hiện dịch vụ (được biểu thị bằng URI)

Sử dụng SOAP sắp xếp hợp lý quy trình cho việc trưng ra một thành phần phần mềm hiện có như một dịch vụ Web vì chữ ký phương thức của dịch vụ xác định cấu trúc tài liệu XML được sử dụng cho cả yêu cầu và đáp ứng.


81
2018-02-04 13:23





Dịch vụ web kiểu RPC sử dụng tên của phương thức và các tham số của phương thức để tạo ra các cấu trúc XML đại diện cho ngăn xếp cuộc gọi của phương thức. Kiểu tài liệu cho biết cơ thể SOAP chứa một tài liệu XML có thể được xác nhận hợp lệ đối với tài liệu lược đồ XML được xác định trước.

Một điểm khởi đầu tốt: SOAP Binding: Sự khác biệt giữa tài liệu và các dịch vụ Web kiểu RPC


21
2018-05-20 09:07





Trong định nghĩa WSDL, các ràng buộc chứa các phép toán, ở đây có kiểu dáng cho mỗi thao tác.

Tài liệu: Trong tệp WSDL, nó chỉ rõ các kiểu chi tiết hoặc có tài liệu XSD nội tuyến hoặc nhập khẩu, mô tả cấu trúc (ví dụ: lược đồ) của các kiểu dữ liệu phức tạp được trao đổi bởi các phương thức dịch vụ đó mà kết hợp lỏng lẻo. Kiểu tài liệu là mặc định.

  • Lợi thế:
    • Sử dụng kiểu tài liệu này, chúng ta có thể xác nhận hợp lệ các thông báo SOAP với lược đồ đã định nghĩa trước. Nó hỗ trợ các kiểu dữ liệu xml và các mẫu.
    • lỏng lẻo.
  • Bất lợi: Hơi khó hiểu một chút.

Trong phần tử kiểu WSDL, hãy xem như sau:

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

Giản đồ được nhập từ tham chiếu bên ngoài.

RPC : Trong tệp WSDL, nó không tạo lược đồ kiểu, bên trong các phần tử thông điệp, nó định nghĩa các thuộc tính tên và kiểu mà kết hợp chặt chẽ.

<types/>  
<message name="getHelloWorldAsString">  
<part name="arg0" type="xsd:string"/>  
</message>  
<message name="getHelloWorldAsStringResponse">  
<part name="return" type="xsd:string"/>  
</message>  
  • Lợi thế: Dễ hiểu.
  • Bất lợi:
    • chúng tôi không thể xác thực thông điệp SOAP.
    • liên kết chặt chẽ

RPC: Không có loại nào trong WSDL
Tài liệu: Các loại phần sẽ có sẵn trong WSDL


14
2018-02-09 10:23



Chỉ cần lặp lại những gì có trong tài liệu tham khảo. Lời giải thích này không giúp tôi hiểu được sự khác biệt. - kinunt
điều này chắc chắn không phải từ tài liệu tham khảo hoặc tài liệu - đầy đủ các lỗi ngữ pháp - specializt


Kịch bản chính nơi JAX-WS RPC và Tài liệu phong cách được sử dụng như sau:

  • Các Cuộc gọi thủ tục từ xa (RPC) mẫu được sử dụng khi người tiêu dùng xem dịch vụ web dưới dạng một ứng dụng hoặc thành phần logic đơn lẻ với dữ liệu được đóng gói. Các thông điệp yêu cầu và phản hồi ánh xạ trực tiếp đến các tham số đầu vào và đầu ra của cuộc gọi thủ tục.

    Ví dụ về kiểu này, mẫu RPC có thể bao gồm dịch vụ thanh toán hoặc dịch vụ báo giá chứng khoán.

  • Các mẫu dựa trên tài liệu được sử dụng trong các tình huống mà người tiêu dùng xem dịch vụ web dưới dạng quy trình kinh doanh đang chạy lâu hơn trong đó tài liệu yêu cầu thể hiện đơn vị thông tin đầy đủ. Loại dịch vụ web này có thể liên quan đến tương tác của con người đối với thí dụ như với một tài liệu yêu cầu ứng dụng tín dụng với một tài liệu trả lời có chứa hồ sơ dự thầu từ các tổ chức cho vay. Bởi vì các quy trình nghiệp vụ chạy dài hơn có thể không thể trả lại tài liệu được yêu cầu ngay lập tức, mẫu dựa trên tài liệu thường được tìm thấy trong các kiến ​​trúc truyền thông không đồng bộ. Biến thể Document / literal của SOAP được sử dụng để thực hiện mẫu dịch vụ web dựa trên tài liệu.


6
2017-10-27 17:27





Tôi nghĩ rằng những gì bạn đang hỏi là sự khác biệt giữa các dịch vụ web SOAP của RPC Literal, Document Literal và Document Wrapped.

Lưu ý rằng các dịch vụ Web tài liệu được mô tả thành chữ và được bao bọc là tốt và chúng khác nhau - một trong những khác biệt chính là sau này là tuân thủ BP 1.1 và trước đây là không.

Ngoài ra, trong Document Literal, thao tác được gọi không được xác định theo tên của nó trong khi trong Wrapped, nó là. Điều này, tôi nghĩ, là một sự khác biệt đáng kể về mặt dễ dàng tìm ra tên hoạt động mà yêu cầu là cho.

Trong điều khoản của RPC bằng chữ so với Tài liệu được bao bọc, yêu cầu Tài liệu được bao bọc có thể dễ dàng được kiểm tra / xác thực đối với lược đồ trong WSDL - một lợi thế lớn.

Tôi khuyên bạn nên sử dụng Document Wrapped làm loại dịch vụ web do sự ưu tiên của nó.

SOAP trên HTTP là giao thức SOAP được ràng buộc với HTTP là nhà cung cấp dịch vụ. SOAP cũng có thể qua SMTP hoặc XXX. SOAP cung cấp một cách tương tác giữa các thực thể (ví dụ như máy khách và máy chủ) và cả hai thực thể có thể so khớp các đối số hoạt động / các giá trị trả về theo ngữ nghĩa của giao thức.

Nếu bạn đang sử dụng XML qua HTTP (và bạn có thể), nó đơn giản được hiểu là tải trọng XML trên yêu cầu / phản hồi HTTP. Bạn sẽ cần phải cung cấp các khuôn khổ để sắp xếp / unmarshal, xử lý lỗi và như vậy.

Hướng dẫn chi tiết với các ví dụ về WSDL và mã với sự nhấn mạnh trên Java: SOAP và JAX-WS, RPC so với các dịch vụ Web tài liệu


3
2017-12-22 08:38