Różnica między komunikatem SOAP a WSDL?


102

Nie wiem, jak wiadomości SOAP i WSDL pasują do siebie? Zacząłem przeglądać wiadomości SOAP, takie jak:

    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>

Czy wszystkie komunikaty SOAP są WSDL? Czy SOAP jest protokołem, który akceptuje własne „komunikaty SOAP” lub „WSDL”? Jeśli są różne, to kiedy powinienem używać komunikatów SOAP, a kiedy WSDL?

Pewne wyjaśnienie na ten temat byłoby niesamowite.


1
WSDL to specyfikacja, które komunikaty mogą być wysyłane i czego można oczekiwać w odpowiedzi. W pewnym sensie dokument wsdl nie jest konieczny do komunikacji mydła, ale jest elementem wymaganym zgodnie z protokołem.
troelskn

Odpowiedzi:


121

Dokument SOAP jest wysyłany na żądanie. Powiedzmy, że jesteśmy księgarnią i mieliśmy zdalny serwer, do którego zapytaliśmy, aby poznać aktualną cenę konkretnej książki. Powiedzmy, że musimy przekazać serwerowi tytuł książki, liczbę stron i numer ISBN.

Ilekroć chcieliśmy poznać cenę, wysyłaliśmy unikalną wiadomość SOAP. Wyglądałoby to mniej więcej tak;

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

Oczekujemy, że otrzymamy z powrotem komunikat odpowiedzi SOAP w stylu;

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

Następnie WSDL opisuje, jak obsłużyć / przetworzyć ten komunikat, gdy serwer go otrzyma. W naszym przypadku opisuje, jakie byłyby typy Title, NumPages i ISBN, czy powinniśmy spodziewać się odpowiedzi z wiadomości GetBookPrice i jak powinna wyglądać ta odpowiedź.

Typy wyglądałyby tak;

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

Ale WSDL zawiera również więcej informacji o tym, które funkcje łączą się ze sobą w celu wykonywania operacji, jakie operacje są dostępne w usłudze oraz gdzie w sieci można uzyskać dostęp do usługi / operacji.

Zobacz także przykłady WSDL z adnotacjami W3


4
Kiedy mówisz ten wiersz „WSDL następnie opisuje, jak obsłużyć / przetworzyć ten komunikat, gdy serwer go otrzyma”. Nie sądzisz, że coś tu jest nie tak. Myślę, że WSDL jest bardziej dla klienta, aby wiedzieć, jakie usługi są udostępniane klientowi. Nie sądzę, żeby to kierowało obsługą lub przetwarzaniem wiadomości na serwer. Czy mam sens?
Unbreakable

76

Komunikat SOAP to dokument XML, który służy do przesyłania danych. WSDL to dokument XML, który opisuje, jak łączyć się i wysyłać żądania do usługi sieciowej.

Zasadniczo wiadomości SOAP to dane, które przesyłasz, WSDL mówi ci, co możesz zrobić i jak wykonywać połączenia.

Szybkie wyszukiwanie w Google przyniesie wiele źródeł do dodatkowego czytania (link do poprzedniej książki jest teraz martwy, aby temu zaradzić, pojawią się nowe rekomendacje w komentarzach)

Zwracając uwagę na konkretne pytania:

Czy wszystkie komunikaty SOAP są WSDL? Nie, wcale nie są tym samym.

Czy SOAP jest protokołem, który akceptuje własne „komunikaty SOAP” lub „WSDL”? Nie - wymagane czytanie, ponieważ jest to daleko.

Jeśli są różne, to kiedy powinienem używać komunikatów SOAP, a kiedy WSDL? Mydło to struktura, którą stosujesz do przesłania wiadomości / danych. Pliki WSDL są używane tylko do określenia, jak w pierwszej kolejności wywoływać usługę. Często zdarza się to jednorazowo, gdy po raz pierwszy dodajesz kod, aby wykonać wywołanie określonej usługi sieciowej.


Nie wiem, co masz na myśli przez „jednorazową rzecz”, gdybyś mógł wymyślić kilka przykładowych wiadomości, które byłyby niesamowite. Więc mówisz, że komunikaty WSDL i SOAP są używane razem?
James

6
WSDL informuje, jak wywołać usługę sieciową. Często będziesz używać WSDL do automatycznego generowania kodu wywołującego usługę sieciową, a następnie nigdy więcej jej nie użyjesz. Przeglądanie rozdziałów w książce, do której dołączyłem, powinno pomóc.
Matthew

27

WSDL (język definicji usługi sieci Web) to plik metadanych opisujący usługę sieci Web.

Rzeczy takie jak nazwa operacji, parametry itp.

Wiadomości mydlane są rzeczywistymi ładunkami


25

Musimy zdefiniować, czym jest usługa sieciowa, zanim powiemy, jaka jest różnica między SOAP i WSDL, gdzie te dwa (SOAP i WSDL) są składnikami usługi internetowej

Większość aplikacji jest tworzona w celu interakcji z użytkownikami, użytkownik wprowadza lub wyszukuje dane za pośrednictwem interfejsu, a aplikacja odpowiada następnie na dane wejściowe użytkownika.

Usługa sieciowa robi mniej więcej to samo, z wyjątkiem tego, że aplikacja usługi sieci Web komunikuje się tylko z komputera na komputer lub z aplikacji do aplikacji. Często nie ma bezpośredniej interakcji użytkownika.

Zasadniczo usługa sieci Web to zbiór otwartych protokołów używanych do wymiany danych między aplikacjami. Zastosowanie otwartych protokołów umożliwia niezależność usług internetowych od platformy. Oprogramowanie napisane w różnych językach programowania i działające na różnych platformach może wykorzystywać usługi internetowe do wymiany danych przez sieci komputerowe, takie jak Internet. Innymi słowy, aplikacje Windows mogą komunikować się z aplikacjami PHP, Java i Perl oraz wieloma innymi, co w normalnych okolicznościach nie byłoby możliwe.

Jak działają usługi internetowe?

Ponieważ różne aplikacje są napisane w różnych językach programowania, często nie mogą się ze sobą komunikować. Usługa sieciowa umożliwia taką komunikację przy użyciu kombinacji otwartych protokołów i standardów, głównie XML, SOAP i WSDL. Usługa sieci Web używa XML do oznaczania danych, SOAP do przesyłania wiadomości i wreszcie WSDL do opisywania dostępności usług. Przyjrzyjmy się tym trzem głównym składnikom aplikacji usługi sieci Web.

Prosty protokół dostępu do obiektów (SOAP)

Simple Object Access Protocol lub SOAP to protokół do wysyłania i odbierania komunikatów między aplikacjami bez konfrontacji z problemami ze współdziałaniem (interoperacyjność oznacza, że ​​platforma, na której działa usługa sieci Web, staje się nieistotna). Innym protokołem, który ma podobną funkcję, jest HTTP. Służy do uzyskiwania dostępu do stron internetowych lub surfowania po sieci. Protokół HTTP zapewnia, że ​​nie musisz martwić się o to, jaki rodzaj serwera sieci Web - czy to Apache, IIS czy jakikolwiek inny - obsługuje przeglądane strony lub czy strony, które przeglądasz, zostały utworzone w ASP.NET lub HTML.

Ponieważ protokół SOAP jest używany zarówno do wysyłania żądań, jak i odpowiadania, jego zawartość różni się nieznacznie w zależności od celu.

Poniżej znajduje się przykład komunikatu żądania i odpowiedzi SOAP

Żądanie 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>

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

Chociaż obie wiadomości wyglądają tak samo, wykorzystują różne metody. Na przykład patrząc na powyższe przykłady można zauważyć, że w żądającej wiadomości zastosowano GetBookPricemetodę, aby uzyskać cenę książki. Odpowiedź jest przeprowadzana GetBookPriceResponsemetodą, która będzie wiadomością, którą zobaczysz jako „żądający”. Możesz również zobaczyć, że wiadomości są tworzone za pomocą XML.

Język opisu usług sieci Web lub WSDL

WSDL to dokument opisujący usługę sieci Web, a także informujący, jak uzyskać dostęp do jej metod i jak z nich korzystać.

WSDL dba o to, skąd wiesz, jakie metody są dostępne w usłudze sieci Web, na którą natrafisz w Internecie.

Spójrz na przykładowy plik WSDL:

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

Najważniejsze rzeczy, o których należy pamiętać o pliku WSDL, to fakt, że zapewnia on:

  • Opis usługi sieci Web

  • Metody używane przez usługę sieci Web i parametry, które przyjmuje

  • Sposób na zlokalizowanie usług internetowych


  • Konkretny opis
    TapanHP

    7

    Lepsza analogia niż rozmowa telefoniczna: zamawianie produktów pocztą w serwisie wysyłkowym. Dokument WSDL przypomina instrukcje, które wyjaśniają, w jaki sposób tworzyć rodzaje formularzy zamówień, które dostawca usług będzie akceptować. Wiadomość SOAP jest jak koperta o standardowym projekcie (rozmiar, kształt, konstrukcja), z którą każdy urząd pocztowy na świecie wie, jak sobie z nią radzić. Formularz zamówienia wkładasz do takiej koperty. Sieć (np. Internet) to usługa pocztowa. Włożyłeś kopertę do poczty. Pracownicy poczty nie zaglądają do koperty. Plik XML ładunku to formularz zamówienia, który został dołączony do koperty. Po dostarczeniu koperty przez pocztę dostawca usług internetowych otwiera ją i przetwarza formularz zamówienia. Jeśli poprawnie utworzyłeś i wypełniłeś formularz,


    4

    Mówiąc najprościej, jeśli masz serwis internetowy kalkulatora. WSDL zawiera informacje o funkcjach, które można zaimplementować lub udostępnić klientowi. Na przykład: dodawanie, usuwanie, odejmowanie i tak dalej. Gdzie, tak jak w przypadku SOAP, faktycznie wykonujesz akcje takie jak doDelete (), doSubtract (), doAdd (). Więc SOAP i WSDL to jabłka i pomarańcze. Nie powinniśmy ich porównywać. Oba mają różne funkcje.


    1

    SOAP: Jest to protokół komunikacyjny oparty na otwartym standardzie XML, który jest używany do wymiany informacji od użytkownika do usługi sieciowej lub odwrotnie. Mydło to tylko dokument, w którym dane są w jakiś sposób zorganizowane. Na każde żądanie i odpowiedź może być dostarczone oddzielne mydło.

    WSDL: W mydle dane są zorganizowane w jakiś sposób i ta organizacja jest określona w WSDL. W tym miejscu określono również typ danych, który ma być używany. Dla żądania i odpowiedzi będzie obecny pojedynczy WSDL


    0

    WSDL to rodzaj umowy między dostawcą API a klientem, który opisuje usługę internetową: funkcja publiczna, pole opcjonalne / wymagane ...

    Ale wiadomość mydlana to dane przesyłane między klientem a dostawcą (ładunek)


    0

    WSDL działa jako interfejs między nadawcą a odbiorcą.
    Wiadomość SOAP to żądanie i odpowiedź w formacie xml.

    w porównaniu z java RMI

    WSDL to klasa interfejsu.
    Komunikat SOAP jest zorganizowanym żądaniem i komunikatem odpowiedzi.


    -1

    Można rozważyć rozmowę telefoniczną w tym numerze wsdl, a wymiana informacji to mydło.

    WSDL to opis jak połączyć się z serwerem komunikacyjnym. SOAP to ma komunikaty komunikacyjne.


    1
    Nie, numer telefonu byłby bardziej podobny do jednego z punktów końcowych zdefiniowanych w WSDL. Nie ma prawdziwego odpowiednika WSDL w dziedzinie połączeń telefonicznych. Najbliższa może być książka telefoniczna, zwłaszcza jeśli uwzględnisz pojęcie „żółtych stron”, które kategoryzują firmy i zawierają pewne szczegóły dotyczące firmy (nie tylko numer telefonu).
    John Saunders
    Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
    Licensed under cc by-sa 3.0 with attribution required.