WSDL - Szybki przewodnik
WSDL oznacza język opisu usług sieciowych. Jest to standardowy format opisu usługi internetowej. WSDL został opracowany wspólnie przez Microsoft i IBM.
Cechy WSDL
WSDL to oparty na języku XML protokół wymiany informacji w zdecentralizowanych i rozproszonych środowiskach.
Definicje WSDL opisują, jak uzyskać dostęp do usługi WWW i jakie operacje ona wykona.
WSDL jest językiem opisującym sposób łączenia się z usługami opartymi na XML.
WSDL jest integralną częścią Universal Description, Discovery and Integration (UDDI), światowego rejestru biznesowego opartego na języku XML.
WSDL to język używany przez UDDI.
WSDL jest wymawiane jako „wiz-dull” i zapisywane jako „WSD-L”.
Wykorzystanie WSDL
WSDL jest często używany w połączeniu ze schematem SOAP i XML w celu świadczenia usług WWW przez Internet. Program klienta łączący się z usługą WWW może odczytać WSDL, aby określić, jakie funkcje są dostępne na serwerze. Wszelkie używane specjalne typy danych są osadzane w pliku WSDL w postaci schematu XML. Klient może następnie użyć protokołu SOAP do rzeczywistego wywołania jednej z funkcji wymienionych w WSDL.
Historia WSDL
WSDL 1.1 został przedstawiony jako notatka W3C przez Ariba, IBM i Microsoft za opisanie usług związanych z działaniem W3C XML dotyczącym protokołów XML w marcu 2001 r.
WSDL 1.1 nie został zatwierdzony przez World Wide Web Consortium (W3C), jednak właśnie opublikował projekt wersji 2.0, który będzie rekomendacją (oficjalnym standardem), a zatem został zatwierdzony przez W3C.
WSDL dzieli usługi sieciowe na trzy określone, możliwe do zidentyfikowania elementy, które można łączyć lub ponownie wykorzystywać po zdefiniowaniu.
Trzy główne elementy WSDL, które można zdefiniować oddzielnie, to -
- Types
- Operations
- Binding
Dokument WSDL ma różne elementy, ale są one zawarte w tych trzech głównych elementach, które można opracować jako oddzielne dokumenty, a następnie można je łączyć lub ponownie wykorzystywać w celu utworzenia kompletnych plików WSDL.
Elementy WSDL
Dokument WSDL zawiera następujące elementy -
Definition- Jest to główny element wszystkich dokumentów WSDL. Definiuje nazwę usługi internetowej, deklaruje wiele przestrzeni nazw używanych w pozostałej części dokumentu i zawiera wszystkie elementy usługi opisane tutaj.
Data types - Typy danych, które mają być używane w komunikatach, mają postać schematów XML.
Message - Jest to abstrakcyjna definicja danych w postaci komunikatu prezentowanego jako cały dokument lub jako argumenty do odwzorowania na wywołanie metody.
Operation - Jest to abstrakcyjna definicja operacji dla komunikatu, taka jak nazwanie metody, kolejka komunikatów lub proces biznesowy, który przyjmie i przetworzy komunikat.
Port type- Jest to abstrakcyjny zbiór operacji odwzorowanych na jeden lub więcej punktów końcowych, definiujący zbiór operacji dla powiązania; kolekcja operacji, ponieważ jest abstrakcyjna, może być mapowana na wiele transportów za pomocą różnych powiązań.
Binding - Jest to konkretny protokół i formaty danych dla operacji i komunikatów zdefiniowanych dla określonego typu portu.
Port - Jest to połączenie powiązania i adresu sieciowego, podając adres docelowy komunikacji usługi.
Service- Jest to zbiór powiązanych punktów końcowych obejmujących definicje usług w pliku; usługi mapują powiązanie na port i zawierają definicje rozszerzalności.
Oprócz tych głównych elementów specyfikacja WSDL definiuje również następujące elementy użytkowe -
Documentation - Ten element jest używany do dostarczania dokumentacji czytelnej dla człowieka i może być zawarty w każdym innym elemencie WSDL.
Import - Ten element służy do importowania innych dokumentów WSDL lub schematów XML.
NOTE - Części WSDL są zwykle generowane automatycznie przy użyciu narzędzi obsługujących usługi sieciowe.
Struktura dokumentu WSDL
Główna struktura dokumentu WSDL wygląda następująco -
<definitions>
<types>
definition of types........
</types>
<message>
definition of a message....
</message>
<portType>
<operation>
definition of a operation.......
</operation>
</portType>
<binding>
definition of a binding....
</binding>
<service>
definition of a service....
</service>
</definitions>
Dokument WSDL może również zawierać inne elementy, takie jak elementy rozszerzenia i element usługi, które umożliwiają grupowanie definicji kilku usług WWW w jednym dokumencie WSDL.
Przejdź dalej, aby przeanalizować przykład dokumentu WSDL.
Poniżej podano plik WSDL, który ma na celu zademonstrowanie prostego programu WSDL.
Załóżmy, że usługa zapewnia jedną publicznie dostępną funkcję o nazwie sayHello . Ta funkcja oczekuje pojedynczego parametru ciągu znaków i zwraca powitanie w postaci pojedynczego ciągu. Na przykład, jeśli przekażesz parametr world , funkcja serwisowa sayHello zwróci powitanie, „Hello, world!”.
Przykład
Zawartość pliku HelloService.wsdl -
<definitions name = "HelloService"
targetNamespace = "http://www.examples.com/wsdl/HelloService.wsdl"
xmlns = "http://schemas.xmlsoap.org/wsdl/"
xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns = "http://www.examples.com/wsdl/HelloService.wsdl"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<message name = "SayHelloRequest">
<part name = "firstName" type = "xsd:string"/>
</message>
<message name = "SayHelloResponse">
<part name = "greeting" type = "xsd:string"/>
</message>
<portType name = "Hello_PortType">
<operation name = "sayHello">
<input message = "tns:SayHelloRequest"/>
<output message = "tns:SayHelloResponse"/>
</operation>
</portType>
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice"
use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice"
use = "encoded"/>
</output>
</operation>
</binding>
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/" />
</port>
</service>
</definitions>
Przykładowa analiza
Definitions - HelloService
Type - Korzystanie z wbudowanych typów danych, które są zdefiniowane w XMLSchema.
Message -
sayHelloRequest - parametr firstName
sayHelloresponse - wartość zwracana powitania
Port Type - operacja sayHello składająca się z żądania i usługi odpowiedzi.
Binding - Kierunek użycia protokołu transportowego SOAP HTTP.
Service - Usługa dostępna pod adresem http://www.examples.com/SayHello/
Port - Kojarzy powiązanie z adresem URI http://www.examples.com/SayHello/, gdzie można uzyskać dostęp do uruchomionej usługi.
Plik <definitions>element musi być elementem głównym wszystkich dokumentów WSDL. Definiuje nazwę usługi internetowej.
Oto fragment kodu z ostatniego rozdziału, który używa elementu definicji .
<definitions name="HelloService"
targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
................................................
</definitions>
Z powyższego przykładu możemy wywnioskować, że definicje -
jest zbiornikiem wszystkich pozostałych elementów.
określa, że ten dokument nosi nazwę HelloService .
określa atrybut targetNamespace . TargetNamespace jest konwencja o XML Schema, który umożliwia dokument WSDL odnieść do siebie. W tym przykładzie określiliśmy targetNamespace http://www.examples.com/wsdl/HelloService.wsdl
określa domyślną przestrzeń nazw: xmlns = http: //schemas.xmlsoap.org/wsdl/. Dlatego zakłada się, że wszystkie elementy bez przedrostka przestrzeni nazw, takie jak message lub portType , są częścią domyślnej przestrzeni nazw WSDL.
określa liczne przestrzenie nazw, które są używane w pozostałej części dokumentu.
NOTE- Specyfikacja przestrzeni nazw nie wymaga, aby dokument był obecny w podanej lokalizacji. Ważne jest, aby określić wartość, która jest unikalna, różni się od wszystkich innych zdefiniowanych przestrzeni nazw.
Usługa internetowa musi zdefiniować swoje dane wejściowe i wyjściowe oraz sposób ich odwzorowania w usługach i poza nimi. WSDL<types>dba o zdefiniowanie typów danych, które są używane przez usługę sieciową. Typy to dokumenty XML lub części dokumentów.
Element types opisuje wszystkie typy danych używane między klientem a serwerem.
WSDL nie jest powiązany wyłącznie z określonym systemem pisania.
WSDL używa specyfikacji schematu XML W3C jako domyślnego wyboru do definiowania typów danych.
Jeśli usługa używa tylko wbudowanych typów prostych schematu XML, takich jak ciągi znaków i liczby całkowite, element types nie jest wymagany.
WSDL umożliwia definiowanie typów w oddzielnych elementach, dzięki czemu można ich wielokrotnie używać z wieloma usługami WWW.
Oto fragment kodu zaczerpnięty ze specyfikacji W3C. Ten kod przedstawia, w jaki sposób element types może być używany w WSDL.
<types>
<schema targetNamespace = "http://example.com/stockquote.xsd"
xmlns = "http://www.w3.org/2000/10/XMLSchema">
<element name = "TradePriceRequest">
<complexType>
<all>
<element name = "tickerSymbol" type = "string"/>
</all>
</complexType>
</element>
<element name = "TradePrice">
<complexType>
<all>
<element name = "price" type = "float"/>
</all>
</complexType>
</element>
</schema>
</types>
Typy danych rozwiązują problem identyfikacji typów danych i formatów, których zamierzasz używać w swoich usługach internetowych. Informacje o typie są udostępniane między nadawcą i odbiorcą. W związku z tym odbiorcy wiadomości potrzebują dostępu do informacji użytych do kodowania danych i muszą wiedzieć, jak je rozszyfrować.
Plik <message> element opisuje dane wymieniane między dostawcami usług internetowych a konsumentami.
Każda usługa sieci Web ma dwa komunikaty: wejściowy i wyjściowy.
Dane wejściowe opisują parametry usługi sieci Web, a dane wyjściowe opisują dane zwracane z usługi sieci Web.
Każda wiadomość zawiera zero lub więcej <part> parametry, po jednym dla każdego parametru funkcji usługi sieciowej.
Każdy <part> parametr kojarzy się z konkretnym typem zdefiniowanym w <types> element kontenera.
Weźmy fragment kodu z rozdziału Przykład WSDL -
<message name = "SayHelloRequest">
<part name = "firstName" type = "xsd:string"/>
</message>
<message name = "SayHelloResponse">
<part name = "greeting" type = "xsd:string"/>
</message>
Tutaj zdefiniowane są dwa elementy wiadomości. Pierwsza reprezentuje wiadomość żądania SayHelloRequest , a druga wiadomość odpowiedzi SayHelloResponse .
Każda z tych wiadomości zawiera pojedynczy element części. Na żądanie część określa parametry funkcji; w tym przypadku określamy jeden parametr firstName . W przypadku odpowiedzi część określa wartości zwracane przez funkcję; w tym przypadku określamy pojedynczą zwracaną wartość powitania.
Plik <portType> element łączy wiele elementów wiadomości, tworząc pełną operację w jedną stronę lub w obie strony.
Na przykład plik <portType>może łączyć jedno żądanie i jeden komunikat odpowiedzi w jedną operację żądania / odpowiedzi. Jest to najczęściej używane w usługach SOAP. PortType może definiować wiele operacji.
Weźmy fragment kodu z rozdziału Przykład WSDL -
<portType name = "Hello_PortType">
<operation name = "sayHello">
<input message = "tns:SayHelloRequest"/>
<output message = "tns:SayHelloResponse"/>
</operation>
</portType>
Element portType definiuje pojedynczą operację o nazwie sayHello .
Operacja składa się z pojedynczego komunikatu wejściowego SayHelloRequest i pliku
komunikat wyjściowy SayHelloResponse .
Wzorce działania
WSDL obsługuje cztery podstawowe wzorce działania -
Jednokierunkowa
Usługa otrzymuje wiadomość. Dlatego operacja ma jeden element wejściowy . Gramatyka dla operacji jednokierunkowej to -
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken">
<wsdl:input name = "nmtoken"? message = "qname"/>
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
Wymagać odpowiedzi
Usługa odbiera wiadomość i wysyła odpowiedź. Operacja ma zatem jeden element wejściowy , po którym następuje jeden element wyjściowy . Aby hermetyzować błędy, można również określić opcjonalny element błędu . Gramatyka operacji żądanie-odpowiedź to -
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
<wsdl:input name = "nmtoken"? message = "qname"/>
<wsdl:output name = "nmtoken"? message = "qname"/>
<wsdl:fault name = "nmtoken" message = "qname"/>*
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
Prośba o odpowiedź
Usługa wysyła wiadomość i otrzymuje odpowiedź. Dlatego operacja ma jeden element wyjściowy , po którym następuje jeden element wejściowy . Aby hermetyzować błędy, można również określić opcjonalny element błędu . Gramatyka dla operacji prośby o odpowiedź to -
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
<wsdl:output name = "nmtoken"? message = "qname"/>
<wsdl:input name = "nmtoken"? message = "qname"/>
<wsdl:fault name = "nmtoken" message = "qname"/>*
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
Powiadomienie
Usługa wysyła wiadomość. Dlatego operacja ma jeden element wyjściowy . Poniżej znajduje się gramatyka operacji powiadamiania -
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken">
<wsdl:output name = "nmtoken"? message = "qname"/>
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
Plik <binding>zawiera szczegółowe informacje o tym, jak operacja portType będzie faktycznie przesyłana przez kabel.
Powiązania można udostępnić za pośrednictwem wielu transportów, w tym HTTP GET, HTTP POST lub SOAP.
Powiązania zapewniają konkretne informacje o protokole używanym do przesyłania operacji typu portType .
Powiązania dostarczają informacji o lokalizacji usługi.
W przypadku protokołu SOAP powiązanie to <soap:binding>, a transport to komunikaty SOAP na szczycie protokołu HTTP.
Możesz określić wiele powiązań dla jednego typu portType .
Element bind ma dwa atrybuty: atrybut nazwy i typu .
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
Nazwa atrybutu określa nazwę wiązania i wpisz punkty atrybut do portu do wiązania, w tym przypadku „tns: Hello_PortType” portu.
Wiązanie SOAP
WSDL 1.1 zawiera wbudowane rozszerzenia dla protokołu SOAP 1.1. Umożliwia określenie szczegółów specyficznych dla SOAP, w tym nagłówków SOAP, stylów kodowania SOAP i nagłówka HTTP SOAPAction. Elementy rozszerzenia SOAP obejmują następujące -
- soap:binding
- soap:operation
- soap:body
mydło: wiążące
Ten element wskazuje, że powiązanie zostanie udostępnione za pośrednictwem protokołu SOAP. Styl atrybut wskazuje ogólny styl formatu komunikatów SOAP. Wartość stylu rpc określa format RPC.
Transportu atrybut wskazuje transport komunikatów SOAP. Wartość http://schemas.xmlsoap.org/soap/http wskazuje transport SOAP HTTP, podczas gdy http://schemas.xmlsoap.org/soap/smtp wskazuje transport SOAP SMTP.
mydło: operacja
Ten element wskazuje powiązanie określonej operacji z określoną implementacją protokołu SOAP. W SoapAction Określa atrybut że SoapAction HTTP nagłówek być wykorzystane do identyfikacji usługi.
mydło: ciało
Ten element umożliwia określenie szczegółów komunikatów wejściowych i wyjściowych. W przypadku HelloWorld element body określa styl kodowania SOAP i URN przestrzeni nazw skojarzonej z określoną usługą.
Oto fragment kodu z rozdziału Przykład -
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc" transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</output>
</operation>
</binding>
ZA <port> element definiuje indywidualny punkt końcowy, określając pojedynczy adres dla powiązania.
Oto gramatyka określająca port -
<wsdl:definitions .... >
<wsdl:service .... > *
<wsdl:port name = "nmtoken" binding = "qname"> *
<-- extensibility element (1) -->
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Element port ma dwa atrybuty: nazwę i powiązanie .
Nazwa atrybutu zapewnia unikalną nazwę wśród wszystkich portów zdefiniowanych w dokumencie zakrywające WSDL.
Atrybut bind odnosi się do powiązania używającego reguł łączenia zdefiniowanych przez WSDL.
Elementy rozszerzalności wiązania służą do określania informacji adresowych dla portu.
Port NIE MOŻE określać więcej niż jednego adresu.
Port NIE MOŻE określać żadnych wiążących informacji innych niż informacje adresowe.
Oto fragment kodu z rozdziału Przykład -
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/">
</port>
</service>
Plik <service>element definiuje porty obsługiwane przez usługę internetową. Dla każdego z obsługiwanych protokołów istnieje jeden element portu. Element usługi to zbiór portów.
Klienci usługi sieci Web mogą nauczyć się następujących elementów usługi -
- gdzie uzyskać dostęp do usługi,
- przez który port, aby uzyskać dostęp do usługi internetowej, i
- jak zdefiniowane są komunikaty komunikacyjne.
Element usługowy zawiera element dokumentacji zapewniający czytelną dla człowieka dokumentację.
Oto fragment kodu z rozdziału Przykład -
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/">
</port>
</service>
Atrybuty powiązania elementu port wiążą adres usługi z elementem powiązania zdefiniowanym w usłudze sieciowej. W tym przykładzie jest to Hello_Binding
<binding name =" Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</output>
</operation>
</binding>
W tym samouczku omówiliśmy podstawy WSDL. Następnym krokiem jest nauczenie się SOAP, UDDI i usług internetowych.
Usługi internetowe
Usługi internetowe to aplikacje internetowe o otwartym standardzie (XML, SOAP, HTTP itp.), Które współdziałają z innymi aplikacjami internetowymi w celu wymiany danych.
Aby dowiedzieć się więcej o usługach sieci Web, odwiedź samouczek dotyczący usług sieci Web.
UDDI
UDDI to oparty na języku XML standard opisywania, publikowania i znajdowania usług internetowych.
Aby dowiedzieć się więcej o UDDI, odwiedź samouczek UDDI.
MYDŁO
SOAP to prosty protokół oparty na języku XML, który umożliwia aplikacjom wymianę informacji za pośrednictwem protokołu HTTP.
Aby dowiedzieć się więcej o SOAP, odwiedź samouczek dotyczący protokołu SOAP.
Jeśli jesteś zainteresowany umieszczeniem swojej firmy, strony internetowej lub książek jako zasobu WSDL, skontaktuj się z [email protected]
Lista specyfikacji WSDL
Specification | Draft / Proposal | W3C Recommendation |
WSDL 1.1 Uwaga | 15 marca 2001 |
|
Scenariusze użycia WSDL | 04. czerwiec 2002 |
|
Wymagania WSDL | 28. paź 2002 |
|
Architektura WSDL | 11. luty 2004 |
|
Słowniczek WSDL | 11. luty 2004 |
|
Scenariusze użycia WSDL | 11. luty 2004 |
|
Język podstawowy WSDL 1.2 | 11. czerwca 2003 |
|
Wzorce komunikatów WSDL 1.2 | 11. czerwca 2003 |
|
Wiązania WSDL 1.2 | 11. czerwca 2003 |
|
WSDL 2.0 Primer | 27. marzec 2006 |
|
Język podstawowy WSDL 2.0 | 27. marzec 2006 |
|
Adjuncts WSDL 2.0 | 27. marzec 2006 |
|
Powiązanie WSDL 2.0 SOAP 1.1 | 27. marzec 2006 |
|
Mapowanie WSDL 2.0 RDF | 18. maja 2006 |
|
WS Addressing Core | 09. maj 2006 |
|
WS Addressing SOAP Binding | 09. maj 2006 |
|
Architektura sieciowa | 15. grudnia 2004 |