Przegląd protokołów do realizacji usług sieciowych Œ SOAP...

25
Akademia Grniczo Hutnicza im. St. Staszica w Krakowie Wydział EAIiE Referat z programowania systemowego Przegląd protokoł w do realizacji usł ug sieciowych SOAP, WSDL, UDDI Jacek Midura Marcin Klimek Studia dzienne Rok 5 Informatyki Rok akademicki 2002/2003

Transcript of Przegląd protokołów do realizacji usług sieciowych Œ SOAP...

AAkkaaddeemmiiaa GGóórrnniicczzoo �� HHuuttnniicczzaa

iimm.. SStt.. SSttaasszziiccaa ww KKrraakkoowwiiee

WWyyddzziiaałł EEAAIIiiEE

Referat z programowania systemowego

Przegląd protokołów do realizacji usług sieciowych � SOAP, WSDL, UDDI

Jacek Midura

Marcin Klimek Studia dzienne

Rok 5 Informatyki Rok akademicki 2002/2003

Spis treści 1. Wprowadzenie ...................................................................................... 3

1.1. Ogólny opis - webservices ...................................................................................................3 1.2. Wstępne zarysowanie obszarów zastosowań SOAP, WSDL i UDDI..................................3

2. Protokół SOAP...................................................................................... 4 2.1. Ogólna charakterystyka protokołu SOAP, relacja pomiędzy XML a SOAP.......................4 2.2. Model komunikacji...............................................................................................................5 2.3. Struktura komunikatu SOAP................................................................................................6

2.3.1. Koperta SOAP..............................................................................................................6 2.3.2. Nagłówek SOAP ..........................................................................................................7 2.3.3. Ciało SOAP ..................................................................................................................7 2.3.4. Kodowanie danych w komunikatach SOAP ................................................................8

2.4. Transmisja komunikatów SOAP protokołem HTTP............................................................9 2.5. Użycie protokołu SOAP w celu zdalnego wywoływania procedur (RPC) ........................10 2.6. Wady i zalety SOAP...........................................................................................................10

3. Protokół WSDL ..................................................................................11 3.1. Do czego służy WSDL.......................................................................................................11 3.2. Elementy protokołu WSDL (struktura dokumentu WSDL)...............................................12 3.3. Przykłady praktyczne zastosowania WSDL.......................................................................15 3.4. Wady i zalety stosowania WSDL.......................................................................................19

4. Protokół UDDI .................................................................................... 20 4.1. Do czego służy UDDI ........................................................................................................20 4.2. Elementy protokołu UDDI .................................................................................................21 4.3. Przykład zastosowania UDDI ............................................................................................22 4.4. Wady i zalety stosowania UDDI ........................................................................................22

5. Zakończenie......................................................................................... 22 5.1. Współpraca protokołów SOAP, WSDL i UDDI................................................................22 5.2. Bezpieczeństwo Web Services...........................................................................................23 5.3. Przyszłość Web Services....................................................................................................24

1. Wprowadzenie

1.1. Ogólny opis - webservices

Pod terminem Usługi Web należy rozumieć zbiór małych funkcjonalnych klocków pracujących w

sieci i udostępniających określone usługi innym systemom czy też innym webservices. Takimi

klockami mogą być np. usługi pogodowe, translatory językowe czy mechanizmy przeliczające

waluty, a wykorzystywane mogą być przez inne usługi udostępniające usługi bardziej złożone.

Należy pamiętać, że webservices zwykle nie będą stanowić samodzielnych aplikacji, a jedynie

stanowić interfejs komunikacyjny pomiędzy klientami z sieci a systemami biznesowymi.

Tim Bray, współtwórca XML, definiuje usługi sieciowe jako standardowy interfejs, który pozwala

jednej aplikacji programowo odkryć, zinterpretować i wykorzystać usługi oferowane przez inne

platformy aplikacyjne bądź systemy operacyjne, w sposób niezależny od wykorzystywanego przez

nie języka programowania.

Wyjątkową siłą webservices jest wykorzystanie istniejących i szeroko stosowanych technologii tj.

protokołu HTTP i języka XML. HTTP jest jednym z najbardziej rozpowszechnionych protokołów

w sieci WEB, co umożliwia natychmiastowe wykorzystanie tej platformy do przesyłania

komunikatów. XML dostarcza metajęzyk za pomocą którego porozumiewają się klienci z usługami

oraz poszczególne komponenty. Idąc dalej, przy budowie i wykorzystaniu webservices nie ma

znaczenia w jakiej technologii jest napisana usługa, na jakim systemie operacyjnym pracuje. Pełną

interoperatywność zapewnia protokół SOAP, który ma aspiracje stać się następcą technik typu

CORBA, RMI czy DCOM.

Dzięki wykorzystywaniu nowego protokołu SOAP usługa opracowana w technologii Web Services

ma możliwość współpracy (wymiany komunikatów) z dowolną inną usługą. Powinny zniknąć

problemy występujące przy konwersjach realizowanych pomiędzy protokołami architektur DCOM i

CORBA. Web Services mogą być pisane w dowolnych językach programowania, więc twórcy

aplikacji będą mogli pisać usługi bez zmiany środowiska tworzenia aplikacji, w którym wcześniej

pracowali. Protokół SOAP jest obecnie wspierany przez wszystkich podstawowych dostawców

systemów oraz oprogramowania narzędziowego.

1.2. Wstępne zarysowanie obszarów zastosowań SOAP, WSDL i UDDI

W celu umożliwienia komunikacji między aplikacjami rozproszonymi w sieci, należy opracować

jakiś standard formatowania i przesyłania informacji. Wiele takich protokołów zostało już

zaproponowanych w przeszłości, z czego niektóre uzyskały status standardu, a inne były rozwijane

przez pojedyncze firmy dla własnych produktów. Większość z nich ma jednak ograniczone

zastosowanie w budowaniu wielkich, rozproszonych aplikacji w skali Internetu, ze względu na ich

różne wymogi lub ograniczenia dotyczące platformy, producenta, czy też możliwości

komunikacyjnych.

Otwartość i rozszerzalność języków opartych na XML została szeroko uznana jako rozwiązanie dla

nowoczesnych protokołów komunikacji sieciowej. Nie znaczy to bynajmniej, że XML powinien

być stosowany w każdej sytuacji. W rzeczywistości stosowanie XML-a może być niekiedy

wykluczone w systemach wymagających maksymalnej wydajności, ponieważ jego składnia jest

bardzo 'rozrzutna', gdy porównać objętość właściwej informacji zawartej w dokumencie do jego

całej objętości wraz ze znacznikami. Jednak dla wielu aplikacji e-biznesowych otwartość i

rozszerzalność dialektów XML-a są ogromnymi zaletami zarówno przy zapisie treści, jak i

struktury komunikatów. Wydaje się, że protokoły komunikacji wykorzystujące XML najlepiej

sprawdzają się w integracji prowadzonej nie w czasie rzeczywistym, co ma często miejsce w

systemach B2B.

2. Protokół SOAP

2.1. Ogólna charakterystyka protokołu SOAP, relacja pomiędzy XML a SOAP

SOAP � Simple Object Access Protocol (Prosty Protokół Dostępu do Obiektów).

Czym jest SOAP:

• jest protokołem, a zatem mechanizmem transportu informacji;

• przenoszone informacje są uporządkowane (posiadają strukturę i typy);

• dane zapisane są w języku rozszerzalnych znaczników (XML);

• w tym protokole można przenosić wszelkiego rodzaju dane (w razie potrzeby są one kodowane

do postaci wyrażalnej w XML);

• SOAP posiada bardzo szeroki zakres zastosowań: od prostych zastosowań komunikacyjnych po

zdalne wywoływanie procedur (RPC).

Czym nie jest SOAP:

• nie jest tym samym, co XML, chociaż jest na nim oparty;

• nie ma związku z protokołami SMTP czy HTTP, chociaż komunikaty SOAP często są

przesyłane z wykorzystaniem mechanizmów typowych dla tych protokołów (np. transmitowane

przez TCP/IP na portach 25 lub 80, często spotyka się również enkapsulowanie wewnątrz

komunikatów SMTP lub HTTP);

• nie jest związany z żadnym konkretnym modelem programowania czy jakąś specyfiką

implementacji � przeciwnie: jest uniwersalnym sposobem komunikacji w środowiskach

rozproszonych oraz heterogenicznych.

Organizacja XML Protocol Working Group działająca w ramach W3C opracowała dokument pod

tytułem XML Protocol Abstract Model, który zawiera rozważania na temat cech dobrego protokołu

komunikacyjnego opartego na XML i może stanowić podstawę oceny jakości konkretnych

implementacji. Dokument ten powstał 9 lipca 2001 i ma status W3C Working Draft.

Oto podstawowe zalecenia dotyczące budowy protokołu XML-owego zawarte w tej pracy:

• Należy dopuszczać możliwość wykorzystania różnych protokołów transportu (np. HTTP,

SMTP i in.)

• Komunikacja może zachodzić wedle różnych schematów: wysłanie pojedynczego

komunikatu, zapytanie/ odpowiedź, wymiana dłuższej sekwencji komunikatów

• Pośredniczące hosty mogą zmieniać komunikat

• API protokołu powinno zapewniać operacje wysłania, odebrania, przesłania dalej i

sprawdzenia statusu komunikatu

• Należy zadbać o obsługę błędów połączenia

• Trzeba umożliwić transport dowolnych załączników do komunikatów w XML

Obecnie trwają prace nad dostosowaniem specyfikacji protokołu SOAP 1.2 do tego modelu

abstrakcyjnego (w tej chwili obowiązująca wersja nosi numer 1.1). Jako baza niniejszego

opracowania wykorzystana została specyfikacja SOAP wersji 1.1 opracowana przez W3C,

znajdująca się pod adresem http://www.w3.org/TR/2000/NOTE-SOAP-20000508

Wśród wielu opracowywanych aktualnie protokołów bazujących na XML-u, SOAP wyróżnia się

najszerszą akceptacją dużych producentów oprogramowania.

2.2. Model komunikacji

Komunikacja za pomocą SOAP jest zasadniczo komunikacją jednokierunkową: od nadawcy do

odbiorcy. Łatwo sobie jednak wyobrazić inne scenariusze bazujące na tym podstawowym: np.

schemat wywołanie � odpowiedź (request � response) lub dialog dwóch stron.

Wybrana do przenoszenia komunikatów warstwa transportowa może ułatwiać budowanie takich

bardziej rozbudowanych scenariuszy, np. przy łączeniu za pomocą TCP/IP po przesłaniu

komunikatu nadawca z odbiorcą zamieniają się rolami, a odpowiedź jest transmitowana tym samym

połączeniem, którym poszło wywołanie.

2.3. Struktura komunikatu SOAP

Komunikat SOAP jest dokumentem XML, który składa się z trzech elementów:

1.koperty SOAP (SOAP envelope) � obowiązkowo

2.nagłówka SOAP (SOAP header) � niekoniecznie

3.ciała SOAP (SOAP body) � obowiązkowo

Przykład:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">

<env:Header>

<n:alertcontrol xmlns:n="http://example.org/alertcontrol">

<n:priority>1</n:priority>

<n:expires>2001-06-22T14:00:00-05:00</n:expires>

</n:alertcontrol>

</env:Header>

<env:Body>

<m:alert xmlns:m="http://example.org/alert">

<m:msg>Pójść na obiad o 14:00</m:msg>

</m:alert>

</env:Body>

</env:Envelope>

2.3.1. Koperta SOAP

Koperta SOAP jest głównym, najbardziej zewnętrznym elementem dokumentu XML, który

reprezentuje komunikat. Odnoszą się do niej następujące reguły:

• nazwa tego elementu musi brzmieć �Envelope�;

Koperta SOAP

Nagłówek SOAP

wpis1 wpis2

Ciało SOAP

element1 element2

• ten element musi być obecny w komunikacie SOAP;

• ten element może zawierać deklaracje przestrzeni nazw oraz dodatkowe atrybuty.

Specyfikacja SOAP nie zakłada przypisywania kopertom tradycyjnych dużych i małych numerów

wersji. Komunikat SOAP musi mieć natomiast element �Envelope� połączony z przestrzenią nazw

"http://schemas.xmlsoap.org/soap/envelope/". Jeśli jakaś aplikacja otrzyma komunikat z inną

przestrzenią nazw w kopercie, ma obowiązek zwrócić błąd.

2.3.2. Nagłówek SOAP

Jest on elementem nieobowiązkowym. Służy do przekazywania informacji o tym kto i w jaki

sposób powinien przetwarzać dane zawarte w ciele komunikatu. Zawartość nagłówka może nieść

także informację dla ogniw pośredniczących w transporcie komunikatu (np. serwerów proxy), może

być także przez nie zmieniana.

Następujące reguły dotyczą nagłówka:

• nazwa tego elementu musi brzmieć �Header�;

• jeśli ten element występuje w komunikacie SOAP, musi być pierwszym bezpośrednim

potomkiem elementu �Envelope�;

• może on zawierać wpisy nagłówka (header entries), każdy będący bezpośrednim

potomkiem elementu �Header�. Każdy wpis musi mieć zdefiniowaną przestrzeń nazw.

2.3.3. Ciało SOAP

W tym elemencie przenoszona jest właściwa informacja. Ciało SOAP musi stosować się do

następujących reguł:

• nazwa elementu musi brzmieć �Body�;

• element ten musi wystąpić w komunikacie i musi być bezpośrednim potomkiem elementu

�Envelope�;

• jeśli w komunikacie występuje nagłówek, to ciało musi następować bezpośrednio po nim,

w przeciwnym wypadku musi być pierwszym potomkiem elementu �Envelope�;

• ten element może zawierać serię wpisów, z których każdy jest jego bezpośrednim

potomkiem.

Szczególnym rodzajem elementu jest element �Fault�. Służy on do przenoszenia informacji o

błędach. Jeśli występuje w komunikacie SOAP, musi być wpisem ciała komunikatu (body entry) i

może wystąpić tylko raz w całym komunikacie. Element �Fault� posiada cztery podelementy:

• faultcode � kod błędu (obowiązkowy). Schemat kodów jest podobny do użytego w

protokole http (1xx, 2xx, 3xx itd.);

• faultstring � czytelne dla człowieka (nie przeznaczone do przetwarzania maszynowego)

objaśnienie istoty błędu (obowiązkowe);

• faultactor � URI obiektu, który spowodował błąd (obowiązkowe, jeśli błąd powstał na

którymś z etapów pośrednich uczestniczących w przekazywaniu komunikatu,

nieobowiązkowe jeśli błąd powstał u adresata komunikatu);

• detail � specyficzne informacje dotyczące błędu (obowiązkowe, jeśli błąd powstał przy

przetwarzaniu ciała komunikatu, zabronione, jeśli błąd nie powstał przy przetwarzaniu ciała

komunikatu).

2.3.4. Kodowanie danych w komunikatach SOAP

Kodowanie danych w SOAP wykorzystuje hierarchię typów danych, która jest generalizacją

podobnych hierarchii spotykanych we współczesnych językach programowania czy bazach danych.

Najbardziej podstawowy podział typów to podział na typy proste (skalarne) oraz na typy złożone,

które są połączeniem pewnej liczby części, z których każda posiada swój typ.

XML dopuszcza bardzo elastyczne kodowanie danych, SOAP w tej dziedzinie jest bardziej

ograniczony (ma ściślejsze reguły kodowania).

SOAP przejmuje od XML wszystkie typy proste. Są to: string , boolean , decimal , float , double ,

duration , dateTime , time , date , gYearMonth , gYear , gMonthDay , gDay , gMonth , hexBinary ,

base64Binary , anyURI , QName, NOTATION.

Przykład typowania danych:

<element name="age" type="int"/>

<element name="height" type="float"/>

<element name="displacement" type="negativeInteger"/>

<element name="color">

<simpleType base="xsd:string">

<enumeration value="Green"/>

<enumeration value="Blue"/>

</simpleType>

</element>

<age>45</age>

<height>5.9</height>

<displacement>-450</displacement>

<color>Blue</color>

Ponadto w SOAP wspierane są następujące typy złożone: rekordy i tablice. Przykład:

<e:Book>

<author>Henry Ford</author>

<preface>Prefatory text</preface>

<intro>This is a book.</intro>

</e:Book>

<element name="myFavoriteNumbers"

type="SOAP-ENC:Array"/>

<myFavoriteNumbers

SOAP-ENC:arrayType="xsd:int[2]">

<number>3</number>

<number>4</number>

</myFavoriteNumbers>

2.4. Transmisja komunikatów SOAP protokołem HTTP

Bardzo często do transportu komunikatów SOAP używany jest protokół HTTP. Przyczyn jest kilka:

• jest to protokół bardzo elastyczny;

• jest zarazem pewny � posiada mechanizmy raportowania błędów;

• jest niezwykle rozpowszechniony (co wiąże się z bogactwem narzędzi);

• umożliwia przekazywanie komunikatów SOAP nawet przez zapory (firewall) analizujące

zawartość transmitowanego strumienia danych (ponieważ zazwyczaj zapory takie

przepuszczają transmisję HTTP).

Ze względu na charakter protokołu HTTP najbardziej naturalne jego wykorzystanie zachodzi

podczas scenariusza transmisji wywołanie � odpowiedź (request � response).

Podczas transmisji komunikatów SOAP wewnątrz wywołań/odpowiedzi HTTP należy używać typu

�text/xml�. Pomimo iż SOAP można powiązać z różnymi typami wywołań HTTP, najczęściej

jednak jest używane wywołanie POST.

Odpowiedzi w protokole HTTP muszą posiadać odpowiedni status (np. 2xx oznaczają poprawne

odebranie i przetworzenie wywołania). Jeśli podczas przetwarzania komunikatu wystąpi błąd, musi

zostać zwrócona odpowiedź ze statusem 500 (Internal Server Error), a w ciele zwracanego

komunikatu SOAP musi się znaleźć element Fault.

Przykład dialogu SOAP w HTTP:

POST /StockQuote HTTP/1.1

Host: www.stockquoteserver.com

Content-Type: text/xml; charset="utf-8"

Content-Length: nnnn

SOAPAction: "Some-URI"

<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:GetLastTradePrice xmlns:m="Some-URI">

<symbol>DIS</symbol>

</m:GetLastTradePrice>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

HTTP/1.1 200 OK

Content-Type: text/xml; charset="utf-8"

Content-Length: nnnn

<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:GetLastTradePriceResponse xmlns:m="Some-URI">

<Price>34.5</Price>

</m:GetLastTradePriceResponse>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

2.5. Użycie protokołu SOAP w celu zdalnego wywoływania procedur (RPC)

Jednym z celów projektowych SOAP było umożliwienie transportowania za jego pomocą wywołań

i odpowiedzi RPC. Choć nie jest to jedyne rozwiązanie, jednak naturalne staje się zastosowanie

jako protokołu transportującego HTTP, gdzie wywołanie HTTP staje się wywołaniem zdalnej

procedury, natomiast odpowiedź HTTP reprezentuje odpowiedź RPC.

Reprezentacja RPC opisana w specyfikacji protokołu SOAP zakłada, że dane niezbędne do

wywołania procedury (URI obiektu docelowego, nazwa metody, opcjonalna sygnatura metody i

parametry metody) przekazywane są jako struktura (złożony typ danych) wewnątrz ciała

komunikatu SOAP. Oczywiście nie jest to jedyna możliwość.

2.6. Wady i zalety SOAP

Do zalet można zaliczyć:

• niezwykłą elastyczność protokołu, który pozwala przenosić właściwie dowolne informacje;

• możliwość definiowania struktury i semantyki przenoszonych informacji;

• możliwość łączenia z różnymi protokołami transportowymi (np. HTTP);

• możliwość realizacji różnych scenariuszy komunikacji;

• akceptowalność protokołu przez właściwie wszystkie systemy komputerowe i środowiska

systemowe;

• niezawodność protokołu dzięki ścisłemu zdefiniowaniu sytuacji wystąpienia błędu oraz

zachowania aplikacji w takich okolicznościach.

Niewątpliwe zaś wady to:

• duży narzut samego języka XML (rozmiar komunikatu jest znacząco większy niż

sumaryczny rozmiar danych w nim zawartych);

• jest jeszcze dość młodym protokołem, podlega rozwojowi i modyfikacjom (chociaż jest już

dość dobrze i ściśle zdefiniowany).

3. Protokół WSDL

3.1. Do czego służy WSDL

WSDL (Web Services Description Language) to wypromowany przez IBM i Aribę, oparty na XML

prosty język pozwalający opisać usługę sieciową - jej sposób wywołania, parametry i formaty

wyników, lecz bez żadnych informacji biznesowych czy parametrów dostępności.

Dzięki WSDL mamy informacje jakie metody udostępnia Web Service. Do tej pory chcąc

skorzystać z komponentów, musieliśmy otrzymać od dostawcy opis techniczny i pliki nagłówkowe,

co nie zawsze było możliwe. Rozwiązanie tu zastosowane jest bardzo eleganckie. Usługę można

odpytać, jakie funkcje udostępnia. Wystarczy, że w URL wpiszemy:

http://localhost/service1.asmx?wsdl

W odpowiedzi otrzymamy dokument w formacie WSDL.

WSDL jest nadzbiorem języka SDL (i innych), umożliwia twórcom usługi Web opisanie w

zrozumiałym formacie co potrafi usługa, gdzie się znajduje i jak ją wywołać. W przeszłości różni

producenci wykorzystywali różne schematy. Język WSDL jest standardowym formatem opisu

sieciowych usług XML.

Język WSDL bazuje na standardzie XML. Jego zadaniem jest tworzenie opisu funkcji usług Web

Services oraz sposobu ich wywoływania. Język WSDL jest przydatny przy automatyzacji

komunikacji pomiędzy usługami Web Services, umożliwiając współdziałanie usług.

Opracowanie dotyczące WSDL oparte jest na informacjach umieszczonych na stronie

http://www.w3.org/.

3.2. Elementy protokołu WSDL (struktura dokumentu WSDL)

Dokument WSDL definiuje usługi (services) jako kolekcje punktów końcowych lub portów.

Występuje tu abstrakcyjne (niezależne od stosowanej technologii) definiowanie punktów

końcowych, przesyłanych wiadomości, formatu danych, operacji.

W protokole WSDL można wyróżnić następujące elementy:

• Komunikat (znacznik <message>)

o Abstrakcyjna definicja formatu danych pojedynczej transmisji

• Typ portu (znacznik <portType>)

o Grupuje komunikaty wg wykonywanych operacji

• Wiązanie (znacznik <binding>)

o Określa konkretny protokół, łączy typ portu z implementacją (zwykle SOAP)

• Usługa (znacznik <service>)

o Definiuje fizyczną lokalizację punktu końcowego

• Schemat danych (znacznik <types>)

o Dostarcza definicji typów danych używanych do opisu wiadomości, opis (niskiego

poziomu) parametrów komunikatu

WSDL nie wprowadza nowego języka definicji typu. Rozpoznaje jedynie typy w opisywanym

formacie wiadomości i wspiera specyfikację XML Schema. WSDL definiuje również wspólny

binding mechanism. Jest on używany do dołączania właściwego protokołu lub formatu danych

lub struktury do abstrakcyjnej wiadomości, operacji czy punktu końcowego.

Struktura dokumentu WSDL jest następująca:

Sekcja <definitions> - zawiera definicję usługi (zwykle plik WSDL opisuje jedną usługę).

Po znaczniku <definitions> występują następujące deklaracje atrybutów:

• name: - opcjonalny atrybut informujący w sposób ogólny o przeznaczeniu usługi;

• targetNamespace: - definiuje logiczną przestrzeń nazw dla informacji o usłudze;

• xmlns:tns: - jeżeli występuje, to ustawiana jest na wartość targetNamespace;

• xmlns:soap i xmlns:xsd: - standardowe definicje przestrzeni nazw;

• xmlns: - domyślna przestrzeń nazw dokumentu WSDL ustawiana jest na

http://schemas.xmlsoap.org/wsdl/

Wewnątrz sekcji <definitions> występują trzy sekcje konceptualne (pojęciowe):

• <message> i <portType>: - określają, jakie operacje dostarcza usługa;

• <binding>: - określa, jak są wywoływane operacje;

• <service>: - określa, gdzie jest ulokowana usługa.

Dodatkowo w opcjonalnej sekcji <types>, położonej bezpośrednio przed sekcją <message>, muszą

być zdefiniowane wszystkie typy złożonych danych, wykorzystywanych przez usługę.

Można powiedzieć, że usługi są definiowane przy użyciu sześciu sekcji:

<types> - opcjonalna sekcja, położona bezpośrednio przed sekcją <message>, tu muszą być

zdefiniowane wszystkie typy złożonych danych, wykorzystywanych przez usługę.

Składnia: <definitions .... >

<types>

<xsd:schema .... />*

</types>

</definitions>

<message> - odnosi się do pojedynczego fragmentu informacji przekazywanego pomiędzy

programem wywołującym oraz usługą. Sekcja ta może mieć zero lub więcej części, a każda z nich

może mieć nazwę i opcjonalny typ. Te części są wydzielone logicznie � każda z nich jest

powiązana z typem systemu. Gdy plik WSDL opisuje obiekt, każda z części jest odwzorowywana

na argument wywołania metody. Gdy metoda zwraca wartość void - odpowiedzią jest pusty

komunikat. Wiadomość może mieć różne atrybuty.

Składnia: <definitions .... >

<message name="nmtoken"> *

<part name="nmtoken" element="qname"? type="qname"?/> *

</message>

</definitions>

<portType> - grupuje komunikaty według wykonywanych operacji

Składnia: <wsdl:definitions .... >

<wsdl:portType name="nmtoken">

<wsdl:operation name="nmtoken" .... /> *

</wsdl:portType>

</wsdl:definitions>

<operation> - definiuje konkretną sekwencję komunikatu wejścia/wyjścia. Atrybut komunikatu

każdego wejścia/wyjścia musi odpowiadać nazwie komunikatu <message>, która została

zdefiniowana wcześniej.

Gdy WSDL opisuje obiekt, każda <operation> jest odwzorowywana na metodę, a każdy

<portType> na interfejs lub klasę Javy.

Składnia: <wsdl:definitions .... > <wsdl:portType .... > *

<wsdl:operation name="nmtoken">

<wsdl:input name="nmtoken"? message="qname"/>

</wsdl:operation>

</wsdl:portType >

</wsdl:definitions>

<binding> - odpowiada zaimplementowanemu <portType>, wykorzystując indywidualny protokół

(np. SOAP lub CORBA). Atrybut typu łączenia musi odpowiadać nazwie wcześniej

zdefiniowanego <portType>. Ponieważ język WSDL jest niezależny od protokołu, można określić

połączenia m.in. dla takich standardowych protokołów, jak DCOM, SOAP czy CORBA. Jeżeli

usługa wspiera więcej niż jeden protokół, to plik WSDL powinien zawierać konceptualną sekcję

<binding> dla każdego z nich.

Składnia: <wsdl:definitions .... >

<wsdl:binding name="nmtoken" type="qname"> *

<-- extensibility element (1) --> *

<wsdl:operation name="nmtoken"> *

<-- extensibility element (2) --> *

<wsdl:input name="nmtoken"? > ?

<-- extensibility element (3) -->

</wsdl:input>

<wsdl:output name="nmtoken"? > ?

<-- extensibility element (4) --> *

</wsdl:output>

<wsdl:fault name="nmtoken"> *

<-- extensibility element (5) --> *

</wsdl:fault>

</wsdl:operation>

</wsdl:binding>

</wsdl:definitions>

<service> - jest modelowana jako zbiór portów, gdzie <port> reprezentuje dostępność konkretnego

połączenia (binding) w określonym punkcie końcowym (węźle). Atrybut połączenia portu musi się

odnosić do nazwy wcześniej zdefiniowanego połączenia <binding>.

Składnia: <wsdl:definitions .... >

<wsdl:service .... > *

<wsdl:port name="nmtoken" binding="qname"> *

<-- extensibility element (1) -->

</wsdl:port>

</wsdl:service>

</wsdl:definitions>

Każdy element pliku WSDL może deklarować opcjonalny komponent <documentation>, który

zawiera przeznaczoną dla użytkownika informację opisową.

3.3. Przykłady praktyczne zastosowania WSDL

Komunikaty i typy portów: <message name=‘Add’>

<part name=‘n1’ type=‘short’>

<part name=‘n2’ type=‘short’>

</message>

<message name=‘AddResponse’>

<part name=‘n1’ type=‘short’>

<part name=‘n2’ type=‘short’>

<part name=‘Result’ type=‘double’>

</message>

<portType name=‘CalcPortType’>

<operation name=‘Add’ parameterOrder=‘AddInOut1 AddInOut2’>

<input message=‘Add’/>

<output message=‘AddResponse’/>

</operation>

</portType>

Wiązania i usługi <binding name=‘CalcBinding’ type=‘CalcPortType’>

<soap:binding style=‘document’

transport=‘http://schemas.xmlsoap.org/soap/http’/>

<operation name=‘Add’>

<soap:operation soapAction=‘http://localhost/WebCalculator.asmx/>

<input>

<soap:body .../>

</input>

<output>

<soap:body .../>

</output>

</operation>

</binding>

<service name=‘Calc’>

<port name=‘CalcPortType’ binding=‘CalcBinding’>

<soap:address location=‘http://localhost/WebCalculator.asmx’/>

</port>

</service>

Metody GET I POST zwracające GIF lub JPG

<definitions .... >

<message name="m1">

<part name="part1" type="xsd:string"/>

<part name="part2" type="xsd:int"/>

<part name="part3" type="xsd:string"/>

</message>

<message name="m2">

<part name="image" type="xsd:binary"/>

</message>

<portType name="pt1">

<operation name="o1">

<input message="tns:m1"/>

<output message="tns:m2"/>

</operation>

</portType>

<service name="service1">

<port name="port1" binding="tns:b1">

<http:address location="http://example.com/"/>

</port>

<port name="port2" binding="tns:b2">

<http:address location="http://example.com/"/>

</port>

<port name="port3" binding="tns:b3">

<http:address location="http://example.com/"/>

</port>

</service>

<binding name="b1" type="pt1">

<http:binding verb="GET"/>

<operation name="o1">

<http:operation location="o1/A(part1)B(part2)/(part3)"/>

<input>

<http:urlReplacement/>

</input>

<output>

<mime:content type="image/gif"/>

<mime:content type="image/jpeg"/>

</output>

</operation>

</binding>

<binding name="b2" type="pt1">

<http:binding verb="GET"/>

<operation name="o1">

<http:operation location="o1"/>

<input>

<http:urlEncoded/>

</input>

<output>

<mime:content type="image/gif"/>

<mime:content type="image/jpeg"/>

</output>

</operation>

</binding>

<binding name="b3" type="pt1">

<http:binding verb="POST"/>

<operation name="o1">

<http:operation location="o1"/>

<input>

<mime:content type="application/x-www-form-urlencoded"/>

</input>

<output>

<mime:content type="image/gif"/>

<mime:content type="image/jpeg"/>

</output>

</operation>

</binding>

</definitions>

Żądanie/Odpowiedź w HTML z wykorzystaniem SOAP (usługa wspiera pojedynczą

operację GetLastTradePrice)

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

3.4. Wady i zalety stosowania WSDL

Zalety stosowania WSDL:

• standardowy format opisu usług

• możliwość wykorzystania w wielu różnych technologiach i systemach komputerowych

• zrozumiały interfejs wykorzystywany przy definiowaniu usług

• łatwy w użyciu

• automatyzacja komunikacji między usługami

• szybsze udostępnianie i aktualizacja oprogramowania

W przyszłości narzędzia WSDL umożliwią generowanie kodu w Javie, C/C++, Corba, IDL, EJB,

COM, COM, SOAP/HTTP i SOAP przez e-mail i zapewnią realizację dowolnego rodzaju

przyłączy. Kod będzie generowany zarówno po stronie serwera, jak i klienta. Serwisy WWW już

teraz dają możliwość uaktywnienia przyłącza.

Do wad można zaliczyć:

• problemy z bezpieczeństwem (to dodatkowy protokół obsługi, który trzeba zabezpieczyć)

• problemy z autoryzacją

• niezbyt duża wydajność

• jest jeszcze dość młodym protokołem, podlega rozwojowi i zmianom

Problemy związane z zapewnieniem bezpieczeństwa to największa przeszkoda w komercyjnym

wykorzystaniu usług sieciowych. WSDL to kolejna warstwa pośrednia, która wymaga

odpowiednich zabezpieczeń. Więcej warstw oznacza więcej możliwości dla hakerów.

Język WSDL jest przydatny, jeśli wiadomo jaka usługa Web Service jest potrzebna. Nie umożliwia

natomiast odnajdowania i przeszukiwania usług. Do tego służą inne protokoły. Nie jest to zbyt

wygodne (konieczne zapewnienie współpracy między protokołami).

4. Protokół UDDI

4.1. Do czego służy UDDI

Głównym zadaniem UDDI (The Universal Description, Discovery and Integration) jest stworzenie

niezależnego od platformy, otwartego rozwiązania do odnajdywania usług sieciowych. UDDI to

globalny rejestr usług udostępniający klientom mechanizmy dynamicznego wyszukiwania innych

usług Web. UDDI stanowi interfejs umożliwiający dynamiczne połączenie się z usługą

udostępnianą przez innego usługodawcę.

Projekt UDDI często określany jako DNS dla biznesu. UDDI jest bowiem usługą katalogową

przechowującą opisy i lokalizacje Web Services zarejestrowanych przez dostawców. Wyszukiwanie

usług jest podobne do działania wyszukiwarek internetowych.

UDDI posiadają dwa rodzaje klientów:

• usługodawców � publikujących swoje usługi

• klientów � pragnących skorzystać z tych usług.

Projekt UDDI wykorzystuje standardy W3C (WorldWide Web Consorcium) oraz IETF (Internet

Engineering Task Force), takie jak: XML (Extensible Markup Language), protokoły HTTP oraz

DNS (Domain Name System). Warstwa UDDI leży nad protokołem SOAP, przez co komunikaty

UDDI stanowią obiekty w komunikatach SOAP. Usługi opisywane są przez WSDL.

Projekt UDDI promują m.in. Ariba, IBM, Intel, Microsoft, SAP i Sun, lecz nie ma on jeszcze

własnej grupy roboczej w W3C (World Wide Web Consorcium). UDDI nie jest związany z WSDL

czy ebXML, ale w jego katalogach opisuje się najczęściej usługi oparte na WSDL. Publiczne

katalogi UDDI udostępniły m.in. firmy Microsoft, IBM i XMethods.

Opracowanie dotyczące UDDI oparte jest na informacjach umieszczonych na stronie

http://uddi.org/.

4.2. Elementy protokołu UDDI

W UDDI istotna jest kategoryzacja firm - musi ona umożliwiać wyszukanie firmy o ściśle

określonym profilu działalności. Specyfikacja UDDI opisuje również sposób wymiany danych

pomiędzy serwerami, które mogą tworzyć sieć węzłów.

Rejestry UDDI zawierają:

• informacje o webservices na bazie nazwy usługodawcy, jego adresu, kategorii biznesowej

czy informacji technicznej itp.,

• operacje dotyczące usługi Web tj. rejestracji, wyszukiwania i korzystania z usługi

szczegóły udostępniane przez niskopoziomowe API

W UDDI informacje zawarte są w czterech różnych strukturach, zapewniających funkcjonalność:

• businessEntity � struktura umożliwiająca wyszukiwanie według biznesu

• businessService � struktura umożliwiająca wyszukiwanie według usługi biznesowej

• bindingTemplate � struktura umożliwiająca wyszukiwanie według wiązania

• tModel � struktura umożliwiająca wyszukiwanie według usługi Web Services

W UDDI wykorzystuje się model zapytania drążącego:

• Wykorzystanie zapytań find_X w celu uzyskania ogólnych informacji � xLists

• Uzyskanie szczegółów przy pomocy zapytania get_xDetail

4.3. Przykład zastosowania UDDI

W Polsce testowy katalog UDDI uruchomiła firma T-Systems na wortalu technologicznym

http://www.e-kompas.pl/, który udostępnia też testowe usługi sieciowe i aplikacje pokazujące

sposób działania tej technologii. Istnieje już kilka rozwiązań, również open source, pozwalających

na uruchomienie własnego węzła UDDI. Z reguły implementacje katalogów UDDI oferują dostęp

zarówno przez strony WWW, jak i przez protokół SOAP - dzięki temu przyszłe systemy będą

mogły automatycznie wyszukiwać potrzebne im usługi.

Pojedynczy wpis w repozytorium UDDI dostępnym w wortalu e-kompas.pl zawiera trzy poziomy

informacji:

• nazwę firmy, jej podstawowe dane adresowe

• kategorię

• spis usług biznesowych udostępnianych przez jej systemy wraz z ich definicją

Dzięki istniejącym już repozytoriom UDDI i Web Services już dziś można uzyskać rozkłady

lotów, notowania giełdowe czy najnowsze wiadomości w sposób umożliwiający automatyczne

wykorzystywanie przez własne oprogramowanie. Docelowym zastosowaniem UDDI ma być

tworzenie otwartych lub zamkniętych e-marketplace, udostępnianie partnerom biznesowym

informacji i procesów dla ich systemów czy integracja systemów wewnątrz przedsiębiorstwa.

4.4. Wady i zalety stosowania UDDI

UDDI jest rozległą inicjatywą umożliwiającą systemom biznesowym odkrywanie siebie nawzajem

oraz definiowanie sposobów interakcji poprzez Internet. Standard UDDI definiuje również sposoby

replikacji pomiędzy repozytoriami. Obsługa UDDI powinna być integralną częścią systemów

biznesowych, dzięki czemu będą one potrafiły łatwo, w sposób dynamiczny i przede wszystkim

szybko, znaleźć inne systemy i współdziałać z nimi.

5. Zakończenie

5.1. Współpraca protokołów SOAP, WSDL i UDDI

Protokół SOAP umożliwia wywoływanie i wykonywanie usług Web Services, publikowanych za

pomocą WSDL i wyszukiwanych za pośrednictwem rejestru UDDI. Wykorzystywanie protokołu

SOAP do wywoływania i wykonywania aplikacji poprzez Internet i korporacyjne zapory ogniowe

umożliwia przedsiębiorstwom bezpieczną integrację własnych procesów biznesowych z procesami

partnerów i dostawców.

Korzystanie z usług przebiega w następujący sposób:

• dostarczyciele usług - rejestrują się u pośredników (UDDI).

• klient - pyta pośrednika, kto mu da daną usługę. (SOAP).

• pośrednik (broker) - lokalizuje mu tę usługę i podaje opis jej użycia (WSDL).

• klient podłącza się do dostarczyciela i korzysta z usługi (SOAP)

PRZYKŁAD:

Wymiana usług WWW pomiędzy dwiema aplikacjami może wyglądać następująco:

1. Przedsiębiorstwo A opisuje swoją usługę WWW poprzez WSDL; usługa jest rejestrowana w

UDDI.

2. Przedsiębiorstwo B, chcące skorzystać z usługi, sięga do definicji WSDL, znajduje ją poprzez

klienta SOAP w UDDI i pobiera w postaci pliku XML. Na koniec generuje komunikat SOAP.

3. Serwer SOAP przetwarza otrzymany plik XML i kieruje do "zainteresowanej" aplikacji.

5.2. Bezpieczeństwo Web Services

Problemy z bezpieczeństwem jest to największa przeszkoda w komercyjnym wykorzystaniu usług

sieciowych. Usługi sieciowe wprowadzają bowiem trzy lub cztery dodatkowe warstwy pośrednie,

które wymagają odpowiednich zabezpieczeń. Więcej warstw oznacza więcej możliwości dla

hakerów.

Jako rozwiązanie tego problemu proponuje się stworzenie pojedynczego standardu. Taką próbą jest

Microsoft .NET Passport.

Najbardziej istotnym elementem bezpieczeństwa jest identyfikacja użytkownika, bowiem

udostępniając usługi w Internecie, zezwalamy na korzystanie z nich w dowolny sposób. Aby

ograniczyć dostęp do konkretnych usług, wystarczy zastosować kod (np. w postaci parametru

wywołania usługi) umożliwiający dostęp tylko autoryzowanemu użytkownikowi. Bezpieczeństwo

transmisji zapewnia SSL użyty w niższych warstwach protokołu. W przypadku powszechnie

dostępnych usług, gdy nie ma możliwości przekazania kodu dostępu, konieczne jest zastosowanie

innych metod uwierzytelniających.

Microsoft stara się narzucić usługę autoryzacyjną MS Passport, która jest kluczowym elementem

platformy .NET My Services. Zasadność powierzenia bazy informacji o użytkownikach jednej,

komercyjnej firmie podważa Sun - firma ta powołała do życia konkurencyjny projekt The Liberty

Alliance, zrzeszający: Apache Software Group, NTT DoCoMo, Bank of America, eBay, Real

Networks, Nokia i RSA Security. Obie koncepcje dążą do zbudowania bazy informacji o

użytkownikach Sieci, ich danych osobowych i preferencjach. Projekty te są jeszcze mało

zaawansowane, trudno więc w tej chwili ocenić ich przydatność dla usług sieciowych.

Przy nawiązywaniu kontaktów biznesowych ważną rolę spełnią inicjatywy w rodzaju Identrus -

organizacji zrzeszającej grupę dużych banków, m.in. Bank of America, Barclays, Chase Manhattan,

Citigroup, Deutsche Bank i mającej poparcie wielu producentów oprogramowania. Identyfikator

Identrus Global ID umożliwia globalną identyfikację firmy za pomocą klucza publicznego (PKI) i

uwiarygodnianie jej jako kontrahenta. Dzięki temu można elektronicznie tworzyć bezpieczne,

otwarte rynki i poważnie angażować się w integrację B2B o zasięgu globalnym. Standard ebXML

jako podstawa integracji B2B zwiększa bezpieczeństwo takiego rozwiązania, ponieważ wymaga na

przykład podpisania przez przedstawicieli firm umowy o integracji systemów.

5.3. Przyszłość Web Services

Jeżeli chodzi o przyszłość usług sieciowych, to jest to jedna z metod pozwalająca na szybsze

udostępnianie i aktualizację oprogramowania.

Web Services komunikują się wykorzystując HTTP oraz XML. Dowolne urządzenie lub system

obsługujący te popularne standardy może utrzymywać takie usługi oraz udostępniać je. Można się

spodziewać, że już niedługo Web Services będą powszechnie implementowane także w

samochodach, automatach ulicznych, czy choćby komórkach. Przy wystąpieniu określonego

zdarzenia, np. wyczerpaniu zapasu puszek w automacie z napojami, ulokowana w nim usługa

skontaktuje się z usługą czuwającą w firmie odpowiedzialnej za dostarczanie napojów do

automatów.

Architektura Web Services nie jest jeszcze kompletna. Jednym z istotnych problemów jest potrzeba

zwiększenia wydajności tej technologii.

Firmy IBM, Microsoft i Ariba implementują dla usług Web Services publiczny globalny rejestr

UBR (Universal Business Registry). Ma on służyć jako centralne repozytorium i obejmować

wszystkie (niezależnie od wielkości) firmy, które chcą zarejestrować swoją działalność oraz

poszukują produktów lub usług oferowanych przez inne podmioty. UBR umożliwi publikację usług

Web Services poprzez proste wypełnienie dostępnego on-line formularza. Po rozpowszechnieniu

usług Web Services rejestr UBR ma pomagać przedsiębiorstwom we wzajemnej lokalizacji oraz

przekazywaniu informacji o ofertach. W planach firmy IBM jest zbudowanie kompletnego

środowiska Application Framework for Web Services.

Trwają dalsze prace rozwojowe nad standardem, dotyczące przede wszystkim dynamicznego

wyszukiwania usług podczas pracy aplikacji. Inne prace koncentrują się na umożliwieniu

wykorzystania w technologii Web Services także języków skryptowych, takich jak JavaScript czy

REXX. W tym celu musi być, między innymi, zmodyfikowana specyfikacja SOAP.

Na świecie koncepcja usług Web Services jest w ostatnim czasie szeroko promowana i spotyka się

z coraz większym zainteresowaniem. Czołowe firmy oferują za darmo zestawy narzędzi, które

pozwalają programistom szybko budować oraz implementować Web Services. Możliwe jest też

przekształcanie istniejących komponentów (np. COM czy JavaBeans) w usługi Web Services. Na

nowej technologii usług internetowych bazuje platforma Microsoft .NET, natomiast IBM rozwija

nieodpłatne narzędzia w kategorii Alphaworks. Już teraz komponenty napisane w Visual Basicu

mogą być łatwo wdrożone jako Web Services, a następnie bez przeszkód wywoływane przez usługi

zbudowane np. z wykorzystaniem technologii VisualAge firmy IBM.

W przyszłości usługi Web Services będą zapewne powszechnie stosowane do przekazywania

informacji biznesowych (np. wyników notowań giełdowych) partnerom i klientom, integracji z

zapewnieniem pracy transakcyjnej w takich zastosowaniach, jak obsługa giełd i systemy rezerwacji,

czy nawet do decentralizacji i przenoszenia procesów biznesowych na zewnątrz przedsiębiorstwa.

W tym ostatnim wypadku usługi Web Services będą wykorzystywane do swobodnej, dynamicznej

integracji między procesami należącymi do różnych podmiotów gospodarczych. Można sobie też

wyobrazić, że w przyszłości aplikacje biznesowe klasy B2B, pracujące w Internecie, będą

budowane z usług Web Services wybieranych dynamicznie podczas realizacji procedur

biznesowych, z uwzględnieniem dostępności, kosztów czy funkcjonalności (jakości).

Literatura

John Paul Mueller "Poznaj SOAP" Wydawnictwo Mikom 2002

http://www.w3.org/

http://uddi.org/