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 GetBookPrice
metodę, aby uzyskać cenę książki. Odpowiedź jest przeprowadzana GetBookPriceResponse
metodą, 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