Sự khác biệt giữa thông báo SOAP và WSDL?


102

Tôi bối rối về cách các thông báo SOAP và WSDL khớp với nhau? Tôi đã bắt đầu xem xét các thông báo SOAP như:

    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/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

Tất cả các tin nhắn SOAP có phải là WSDL không? SOAP có phải là giao thức chấp nhận 'thông báo SOAP' hoặc 'WSDL của chính nó không? Nếu chúng khác nhau, thì khi nào tôi nên sử dụng thông báo SOAP và khi nào tôi nên sử dụng WSDL?

Một số làm rõ xung quanh điều này sẽ là tuyệt vời.


1
Một wsdl là một đặc tả về những thông điệp nào có thể được gửi đi và những gì có thể được mong đợi là phản hồi. Có nghĩa, tài liệu wsdl không cần thiết cho giao tiếp xà phòng, nhưng nó là một phần tử bắt buộc theo giao thức.
troelskn

Câu trả lời:


121

Một tài liệu SOAP được gửi theo yêu cầu. Giả sử chúng tôi là một cửa hàng sách và có một máy chủ từ xa, chúng tôi đã truy vấn để tìm hiểu giá hiện tại của một cuốn sách cụ thể. Giả sử chúng tôi cần chuyển tên Sách, số trang và số ISBN cho máy chủ.

Bất cứ khi nào chúng tôi muốn biết giá, chúng tôi sẽ gửi một tin nhắn SOAP duy nhất. Nó trông giống như thế này;

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPrice xmlns:m="http://namespaces.my-example-book-info.com">
      <ISBN>978-0451524935</ISBN>
      <Title>1984</Title>
      <NumPages>328</NumPages>
    </m:GetBookPrice>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

Và chúng tôi mong đợi nhận lại một thông báo phản hồi SOAP như;

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPriceResponse xmlns:m="http://namespaces.my-example-book-info.com">
      <CurrentPrice>8.99</CurrentPrice>
      <Currency>USD</Currency>
    </m:GetBookPriceResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Sau đó, WSDL mô tả cách xử lý / xử lý thông báo này khi máy chủ nhận được. Trong trường hợp của chúng tôi, nó mô tả các loại Title, NumPages & ISBN sẽ là gì, liệu chúng ta có nên mong đợi phản hồi từ thông báo GetBookPrice hay không và phản hồi đó sẽ như thế nào.

Các kiểu sẽ như thế này;

<wsdl:types>

  <!-- all type declarations are in a chunk of xsd -->
  <xsd:schema targetNamespace="http://namespaces.my-example-book-info.com"
    xmlns:xsd="http://www.w3.org/1999/XMLSchema">

    <xsd:element name="GetBookPrice">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="ISBN" type="string"/>
          <xsd:element name="Title" type="string"/>
          <xsd:element name="NumPages" type="integer"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

    <xsd:element name="GetBookPriceResponse">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="CurrentPrice" type="decimal" />
          <xsd:element name="Currency" type="string" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

  </xsd:schema>
</wsdl:types>

Nhưng WSDL cũng chứa nhiều thông tin hơn, về các chức năng nào liên kết với nhau để thực hiện các hoạt động, và những hoạt động nào khả dụng trong dịch vụ và vị trí trên mạng mà bạn có thể truy cập vào dịch vụ / hoạt động.

Xem thêm Các ví dụ về WSDL được chú thích của W3


4
Khi bạn nói dòng này "Sau đó WSDL mô tả cách xử lý / xử lý thông báo này khi máy chủ nhận được." Bạn không nghĩ rằng có điều gì đó sai ở đây. Tôi nghĩ WSDL nhiều hơn để khách hàng biết các dịch vụ đang được tiếp xúc với khách hàng là gì. Tôi không nghĩ rằng nó hướng dẫn việc xử lý hoặc xử lý tin nhắn đến máy chủ. Tôi có hiểu không?
Unbreakable vào

76

Thông báo SOAP là một tài liệu XML được sử dụng để truyền dữ liệu của bạn. WSDL là một tài liệu XML mô tả cách kết nối và thực hiện các yêu cầu tới dịch vụ web của bạn.

Về cơ bản, tin nhắn SOAP là dữ liệu bạn truyền, WSDL cho bạn biết bạn có thể làm gì và thực hiện cuộc gọi như thế nào.

Tìm kiếm nhanh trong Google sẽ mang lại nhiều nguồn để đọc thêm (liên kết sách trước đó hiện đã chết, để chống lại điều này sẽ đưa bất kỳ đề xuất mới nào vào nhận xét)

Chỉ cần lưu ý các câu hỏi cụ thể của bạn:

Tất cả các tin nhắn SOAP có phải là WSDL không? Không, chúng không giống nhau chút nào.

SOAP có phải là giao thức chấp nhận 'thông báo SOAP' hoặc 'WSDL của chính nó không? Không - yêu cầu đọc vì điều này là xa.

Nếu chúng khác nhau, thì khi nào tôi nên sử dụng thông báo SOAP và khi nào tôi nên sử dụng WSDL? Xà phòng là cấu trúc bạn áp dụng cho tin nhắn / dữ liệu của mình để chuyển. WSDL chỉ được sử dụng để xác định cách thực hiện các cuộc gọi đến dịch vụ ngay từ đầu. Thường thì đây là một việc xảy ra khi lần đầu tiên bạn thêm mã để thực hiện cuộc gọi đến một dịch vụ web cụ thể.


Tôi không hiểu bạn muốn nói gì về "một lần duy nhất" nếu bạn có thể làm sáng tỏ bằng một số thông điệp mẫu tuyệt vời. Ngoài ra, bạn đang nói rằng các thông báo WSDL và SOAP được sử dụng cùng nhau?
James

6
WSDL cho bạn biết cách gọi dịch vụ web. Thông thường, bạn sẽ sử dụng WSDL để tự động tạo mã để gọi dịch vụ web và sau đó không bao giờ sử dụng nữa. Đọc lướt các chương trong cuốn sách mà tôi đã liên kết sẽ hữu ích.
Matthew

27

WSDL (Ngôn ngữ Định nghĩa Dịch vụ Web) là một tệp siêu dữ liệu mô tả dịch vụ web.

Những thứ như tên hoạt động, thông số, v.v.

Thông báo xà phòng là trọng tải thực tế


25

Chúng ta cần xác định dịch vụ web là gì trước khi cho biết đâu là sự khác biệt giữa SOAP và WSDL trong đó cả hai (SOAP và WSDL) là các thành phần của dịch vụ web

Hầu hết các ứng dụng được phát triển để tương tác với người dùng, người dùng nhập hoặc tìm kiếm dữ liệu thông qua một giao diện và sau đó ứng dụng sẽ phản hồi lại đầu vào của người dùng.

Dịch vụ Web ít nhiều thực hiện những điều tương tự ngoại trừ việc ứng dụng dịch vụ Web chỉ giao tiếp từ máy này sang máy khác hoặc ứng dụng với ứng dụng. Thường không có sự tương tác trực tiếp của người dùng.

Dịch vụ Web về cơ bản là một tập hợp các giao thức mở được sử dụng để trao đổi dữ liệu giữa các ứng dụng. Việc sử dụng các giao thức mở cho phép các dịch vụ Web độc lập với nền tảng. Phần mềm được viết bằng các ngôn ngữ lập trình khác nhau và chạy trên các nền tảng khác nhau có thể sử dụng các dịch vụ Web để trao đổi dữ liệu qua các mạng máy tính như Internet. Nói cách khác, các ứng dụng Windows có thể nói chuyện với các ứng dụng PHP, Java và Perl và nhiều ứng dụng khác, điều này trong trường hợp bình thường sẽ không thể thực hiện được.

Dịch vụ Web hoạt động như thế nào?

Bởi vì các ứng dụng khác nhau được viết bằng các ngôn ngữ lập trình khác nhau, chúng thường không thể giao tiếp với nhau. Dịch vụ Web cho phép giao tiếp này bằng cách sử dụng kết hợp các giao thức và tiêu chuẩn mở, chủ yếu là XML, SOAP và WSDL. Một dịch vụ Web sử dụng XML để gắn thẻ dữ liệu, SOAP để chuyển một thông điệp và cuối cùng là WSDL để mô tả tính khả dụng của các dịch vụ. Chúng ta hãy xem xét ba thành phần chính này của một ứng dụng dịch vụ Web.

Giao thức truy cập đối tượng đơn giản (SOAP)

Giao thức truy cập đối tượng đơn giản hoặc SOAP là một giao thức để gửi và nhận tin nhắn giữa các ứng dụng mà không gặp phải các vấn đề về khả năng tương tác (khả năng tương tác có nghĩa là nền tảng mà dịch vụ Web đang chạy trở nên không liên quan). Một giao thức khác có chức năng tương tự là HTTP. Nó được sử dụng để truy cập các trang Web hoặc để lướt mạng. HTTP đảm bảo rằng bạn không phải lo lắng về loại máy chủ Web nào - cho dù là Apache hay IIS hay bất kỳ loại nào khác - phục vụ bạn các trang bạn đang xem hoặc các trang bạn xem được tạo bằng ASP.NET hay HTML.

Bởi vì SOAP được sử dụng cho cả yêu cầu và phản hồi, nội dung của nó thay đổi một chút tùy thuộc vào mục đích của nó.

Dưới đây là ví dụ về thông báo phản hồi và yêu cầu SOAP

Yêu cầu SOAP:

POST /InStock HTTP/1.1 
Host: www.bookshop.org 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: nnn 
<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Body xmlns:m="http://www.bookshop.org/prices"> 
    <m:GetBookPrice> 
    <m:BookName>The Fleamarket</m:BookName> 
    </m:GetBookPrice> 
</soap:Body> 
</soap:Envelope>

Phản hồi SOAP:

POST /InStock HTTP/1.1 
Host: www.bookshop.org 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: nnn 
<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Body xmlns:m="http://www.bookshop.org/prices"> 
    <m:GetBookPriceResponse> 
    <m: Price>10.95</m: Price> 
    </m:GetBookPriceResponse> 
</soap:Body> 
</soap:Envelope> 

Mặc dù cả hai thông báo trông giống nhau, nhưng chúng thực hiện các phương pháp khác nhau. Ví dụ, nhìn vào các ví dụ trên, bạn có thể thấy rằng thông báo yêu cầu sử dụng GetBookPricephương thức để lấy giá sách. Phản hồi được thực hiện theo GetBookPriceResponsephương thức, đó sẽ là thông báo mà bạn với tư cách là "người yêu cầu" sẽ thấy. Bạn cũng có thể thấy rằng các thư được soạn bằng XML.

Ngôn ngữ mô tả dịch vụ web hoặc WSDL

WSDL là một tài liệu mô tả một dịch vụ Web và cũng cho bạn biết cách truy cập và sử dụng các phương pháp của nó.

WSDL quan tâm đến việc làm thế nào để bạn biết những phương pháp nào có sẵn trong một dịch vụ Web mà bạn tình cờ gặp trên Internet.

Hãy xem một tệp WSDL mẫu:

<?xml version="1.0" encoding="UTF-8"?> 
<definitions  name ="DayOfWeek"  
  targetNamespace="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" 
  xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" 
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"  
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns="http://schemas.xmlsoap.org/wsdl/">  
  <message name="DayOfWeekInput"> 
    <part name="date" type="xsd:date"/> 
  </message> 
  <message name="DayOfWeekResponse"> 
    <part name="dayOfWeek" type="xsd:string"/> 
  </message> 
  <portType name="DayOfWeekPortType"> 
    <operation name="GetDayOfWeek"> 
      <input message="tns:DayOfWeekInput"/> 
      <output message="tns:DayOfWeekResponse"/> 
    </operation> 
  </portType> 
  <binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType"> 
    <soap:binding style="document"  
      transport="http://schemas.xmlsoap.org/soap/http"/> 
    <operation name="GetDayOfWeek"> 
      <soap:operation soapAction="getdayofweek"/> 
      <input> 
        <soap:body use="encoded"  
          namespace="http://www.roguewave.com/soapworx/examples"  
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
        <soap:body use="encoded"  
          namespace="http://www.roguewave.com/soapworx/examples"   
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
    </operation> 
  </binding> 
  <service name="DayOfWeekService" > 
    <documentation> 
      Returns the day-of-week name for a given date 
    </documentation> 
    <port name="DayOfWeekPort" binding="tns:DayOfWeekBinding"> 
      <soap:address location="http://localhost:8090/dayofweek/DayOfWeek"/> 
    </port> 
  </service> 
</definitions> 

Những điều chính cần nhớ về tệp WSDL là nó cung cấp cho bạn:

  • Mô tả về một dịch vụ Web

  • Các phương thức mà một dịch vụ Web sử dụng và các tham số mà nó sử dụng

  • Một cách để định vị các dịch vụ Web


  • Mô tả bê tông
    TapanHP

    7

    Tương tự tốt hơn so với cuộc gọi điện thoại: Đặt hàng sản phẩm qua thư bưu điện từ dịch vụ đặt hàng qua thư. Tài liệu WSDL giống như hướng dẫn giải thích cách tạo loại biểu mẫu đặt hàng mà nhà cung cấp dịch vụ sẽ chấp nhận. Thông điệp SOAP giống như một phong bì với thiết kế tiêu chuẩn (kích thước, hình dạng, cấu trúc) mà mọi bưu cục trên toàn thế giới đều biết cách xử lý. Bạn đặt đơn đặt hàng của bạn vào một phong bì như vậy. Mạng (ví dụ: internet) là dịch vụ bưu chính. Bạn đặt phong bì của bạn vào thư. Nhân viên của dịch vụ bưu chính không nhìn vào bên trong phong bì. Trọng tải XML là biểu mẫu đơn đặt hàng mà bạn đã gửi kèm trong phong bì. Sau khi bưu điện chuyển phong bì, nhà cung cấp dịch vụ web sẽ mở phong bì và xử lý đơn đặt hàng. Nếu bạn đã tạo và điền vào biểu mẫu một cách chính xác,


    4

    Nói một cách dễ hiểu nếu bạn có một dịch vụ web của máy tính. WSDL cho biết về các chức năng mà bạn có thể triển khai hoặc tiếp xúc với máy khách. Ví dụ: thêm, xóa, trừ, v.v. Khi sử dụng SOAP, bạn thực sự thực hiện các hành động như doDelete (), doSubtract (), doAdd (). Vì vậy, SOAP và WSDL là táo và cam. Chúng ta không nên so sánh chúng. Cả hai đều có chức năng khác nhau của riêng họ.


    1

    SOAP: Đó là một giao thức Truyền thông dựa trên XML tiêu chuẩn mở được sử dụng để trao đổi thông tin từ người dùng đến dịch vụ web hoặc ngược lại. Xà phòng chỉ là tài liệu trong đó dữ liệu được tổ chức trong một số Manner. Đối với mọi yêu cầu và đáp ứng xà phòng riêng biệt có thể có mặt.

    WSDL: Trong xà phòng, dữ liệu được tổ chức theo một số cách và tổ chức này được chỉ định trong WSDL, Loại dữ liệu phải được sử dụng cũng được chỉ định ở đây. Đối với yêu cầu và phản hồi, WSDL duy nhất sẽ có mặt


    0

    WSDL là một loại hợp đồng giữa nhà cung cấp API và khách hàng, nó mô tả dịch vụ web: chức năng công khai, trường tùy chọn / bắt buộc ...

    Nhưng Thông điệp xà phòng là dữ liệu được chuyển giữa khách hàng và nhà cung cấp (tải trọng)


    0

    WSDL hoạt động như một giao diện giữa người gửi và người nhận.
    Thông báo SOAP là yêu cầu và phản hồi ở định dạng xml.

    so sánh với java RMI

    WSDL là
    thông điệp SOAP của lớp giao diện được sắp xếp theo yêu cầu và thông báo phản hồi.


    -1

    Chúng ta có thể coi một cuộc điện thoại Trong đó Số là wsdl và trao đổi thông tin là xà phòng.

    WSDL là mô tả cách kết nối với máy chủ truyền thông.SOAP là có các thông báo liên lạc.


    1
    Không, số điện thoại sẽ giống một trong những điểm cuối được xác định trong WSDL. Không có thực tương đương với WSDL trong lĩnh vực cuộc gọi điện thoại. Gần nhất có thể là danh bạ điện thoại, đặc biệt nếu bạn bao gồm khái niệm "trang vàng" phân loại các doanh nghiệp và cung cấp một số chi tiết về doanh nghiệp (không chỉ số điện thoại).
    John Saunders
    Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
    Licensed under cc by-sa 3.0 with attribution required.