Podstawowe zrozumienie struktury WSDL — (objaśnienie języka opisu usługi sieciowej)
Opublikowany: 2020-08-24Być może widzieliście mój poprzedni post na temat połączenia SOAP vs. REST. Obecnie firmy przechodzą na rozmowy serwisowe REST, ale nadal większość firm nadal używa SOAP zamiast REST. Ten samouczek wyjaśnia podstawy języka WSDL (Web Service Description Language).
Jeśli masz jakiekolwiek z poniższych pytań, jesteś we właściwym miejscu:
- Co to jest język opisu usług sieci Web (WSDL)?
- Samouczek WSDL
- Objaśnienie języka opisu usług internetowych (WSDL)
- Przykłady WSDL – Web Service Description Language
Język opisu usług sieci Web (WSDL)
W Java Web Development World WSDL jest formatem XML służącym do opisywania usług sieciowych jako zestawu punktów końcowych działających na komunikatach zawierających informacje zorientowane na dokumenty lub informacje zorientowane na procedury.
Operacje i komunikaty są opisane w sposób abstrakcyjny, a następnie powiązane z konkretnym protokołem sieciowym i formatem komunikatu w celu zdefiniowania punktu końcowego. Powiązane konkretne punkty końcowe są łączone w abstrakcyjne punkty końcowe (usługi).
WSDL można rozszerzać, aby umożliwić opisywanie punktów końcowych i ich komunikatów niezależnie od tego, jakie formaty komunikatów lub protokoły sieciowe są używane do komunikacji, jednak jedyne powiązania opisane w tym dokumencie opisują, jak używać WSDL
w połączeniu z SOAP 1.1, HTTP GET/POST i MIM.

Inny musi przeczytać:
- Utwórz przykładowy plik WSDL w środowisku Eclipse i generuj klienta
- Jak zbudować RESTful Service z Javą przy użyciu JAX-RS i Jersey (przykład)
Innymi słowy: dokument WSDL definiuje usługi jako kolekcje punktów końcowych sieci lub ports
. W WSDL abstrakcyjna definicja punktów końcowych i komunikatów jest oddzielona od ich konkretnego wdrożenia sieciowego lub powiązań formatu danych. Pozwala to na ponowne użycie abstrakcyjnych definicji: messages
, które są abstrakcyjnymi opisami wymienianych danych oraz typów portów, które są abstrakcyjnymi zbiorami operacji.
Konkretne specyfikacje protokołu i formatu danych dla określonego typu portu stanowią binding
wielokrotnego użytku. Port jest definiowany przez powiązanie adresu sieciowego z wiązaniem wielokrotnego użytku, a zbiór portów definiuje usługę.
Dlatego dokument WSDL wykorzystuje następujące elementy w definicji usług sieciowych:
-
Types
– kontener na definicje typów danych przy użyciu pewnego systemu typów (takiego jakXSD
). -
Message
– abstrakcyjna, wpisana definicja przesyłanych danych. -
Operation
– abstrakcyjny opis akcji obsługiwanej przez usługę. -
Port Type
– abstrakcyjny zestaw operacji obsługiwanych przez jeden lub więcej punktów końcowych. -
Binding
– konkretny protokół i specyfikacja formatu danych dla konkretnego typu portu. -
Port
– pojedynczy punkt końcowy zdefiniowany jako kombinacja powiązania i adresu sieciowego. -
Service
– zbiór powiązanych punktów końcowych.
Element | Opis |
---|---|
<typy> | Definiuje typy danych (Schemat XML) używane przez usługę sieciową |
<wiadomość> | Definiuje elementy danych dla każdej operacji |
<typ portu> | Opisuje operacje, które można wykonać, i związane z nimi komunikaty. |
<wiązanie> | Definiuje protokół i format danych dla każdego typu portu |
Przykład: SOAP 1.1 żądanie/odpowiedź przez HTTP
Przykładowy dokument XML WSDL.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
<? xml version = "1.0" ?> < definitions name = "StockQuote" targetNamespace = "http://example.com/stockquote.wsdl" xmlns : tns = "http://example.com/stockquote.wsdl" xmlns : xsd1 = "http://example.com/stockquote.xsd" xmlns : soap = "http://schemas.xmlsoap.org/wsdl/soap/" xmlns = "http://schemas.xmlsoap.org/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 > < message name = "GetLastTradePriceInput" > < part name = "body" element = "xsd1:TradePriceRequest" / > < / message > < message name = "GetLastTradePriceOutput" > < part name = "body" element = "xsd1:TradePrice" / > < / message > < portType name = "StockQuotePortType" > < operation name = "GetLastTradePrice" > < input message = "tns:GetLastTradePriceInput" / > < output message = "tns:GetLastTradePriceOutput" / > < / operation > < / portType > < binding name = "StockQuoteSoapBinding" type = "tns:StockQuotePortType" > < soap : binding style = "document" transport = "http://schemas.xmlsoap.org/soap/http" / > < operation name = "GetLastTradePrice" > < soap : operation soapAction = "http://example.com/GetLastTradePrice" / > < input > < soap : body use = "literal" / > < / input > < output > < soap : body use = "literal" / > < / output > < / operation > < / binding > < service name = "StockQuoteService" > < documentation > My first service < / documentation > < port name = "StockQuotePort" binding = "tns:StockQuoteBinding" > < soap : address location = "http://example.com/stockquote" / > < / port > < / service > < / definitions > |

Przykład WSDL SOAP 2.0:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
< ! -- Crunchify ' s example of WSDL 2.0 -- > <? xml version = "1.0" encoding = "UTF-8" ?> < definitions xmlns = "http://www.w3.org/ns/wsdl" xmlns : tns = "http://www.tmsws.com/wsdl20sample" xmlns : whttp = "http://schemas.xmlsoap.org/wsdl/http/" xmlns : wsoap = "http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace = "http://www.tmsws.com/wsdl20sample" > < ! -- Abstract type -- > < types > < xs : schema xmlns : xs = "http://www.w3.org/2001/XMLSchema" xmlns = "http://www.tmsws.com/wsdl20sample" targetNamespace = "http://crunchify.com/wsdl20" > < xs : element name = "request" > . . . add your code here . . . < / xs : element > < xs : element name = "response" > . . . add your code here . . . < / xs : element > < / xs : schema > < / types > < ! -- Abstract interfaces -- > < interface name = "CrunchifyItem" > < fault name = "ErrorDescription" element = "tns:response" / > < operation name = "Get" pattern = "http://www.w3.org/ns/wsdl/in-out" > < input messageLabel = "In" element = "tns:request" / > < output messageLabel = "Out" element = "tns:response" / > < / operation > < / interface > < ! -- Concrete Binding Over HTTP -- > < binding name = "HttpBinding" interface = "tns:CrunchifyItem" type = "http://www.w3.org/ns/wsdl/http" > < operation ref = "tns:Get" whttp : method = "GET" / > < / binding > < ! -- Concrete Binding with SOAP -- > < binding name = "SoapBinding" interface = "tns:CrunchifyItem" type = "http://www.w3.org/ns/wsdl/soap" wsoap : protocol = "http://www.w3.org/2003/05/soap/bindings/HTTP/" wsoap : mepDefault = "http://www.w3.org/2003/05/soap/mep/request-response" > < operation ref = "tns:Get" / > < / binding > < ! -- Web Service offering endpoints for both bindings -- > < service name = "ServiceOne" interface = "tns:CrunchifyItem" > < endpoint name = "HttpEndpoint" binding = "tns:HttpBinding" address = "http://www.example.com/rest/" / > < endpoint name = "SoapEndpoint" binding = "tns:SoapBinding" address = "http://crunchify.com/soap/" / > < / service > < / definitions > |
Wzorzec projektu fabrycznego wyjaśniony w przykładzie.

Daj mi znać, jeśli masz jakieś pytania.