SOAP
Transkrypt
SOAP
Simple Object Access Protocol Bartłomiej Świercz Katedra Mikroelektroniki i Technik Informatycznych Łódź, 11 grudnia 2005 roku Bartłomiej Świercz Simple Object Access Protocol Czym jest SOAP? Akronim SOAP oznacza Simple Object Access Protocol. SOAP jest protokołem komunikacyjnym służącym do wymiany wiadomości pomiędzy aplikacjami. SOAP przeznaczony jest do wymiany danych w sieci internet. SOAP jest niezależny od platformy sprzętowej oraz języka programowania. Wiadomości SOAP są opisane za pomocą XML. SOAP jest standardem W3C: http://www.w3.org/TR/soap/ Bartłomiej Świercz Simple Object Access Protocol Dlaczego SOAP? Komunikacja Systemy wykorzystujące komunikację rozproszoną w postaci Remote Procedure Call jak CORBA lub DCOM napotykają na problemy bezpieczeństwa i dostępności serwisów w sieci internet. Przeszkodą są licznie wykorzystywane w sieci Internet systemy firewall i proxy. Powszechność SOAP jest wykorzystywany przez wiele firm i aplikacji komercyjnych. Jest podstawowym elementem architektury Microsoft .NET dla aplikacji internetowych. Bartłomiej Świercz Simple Object Access Protocol Założenia projektowe SOAP Podstawowym założeniem projektu SOAP była prostota i rozszerzalność projektowanego protokołu. Oznacza to, że wiele elementów występujących w innych protokołach RPC nie pojawia się w SOAP np: Rozproszony odśmiecacz pamięci (Distributed garbage collection). Przekazywanie obiektów przez referencję (Objects-by-reference). Bartłomiej Świercz Simple Object Access Protocol Podział SOAP Protokół SOAP logicznie dzieli się na trzy części: Kopertę (SOAP envelope) - jest to definicja opisująca co znajduje się w wiadomości, dla kogo jest przeznaczona i czy wiadomość jest obowiązkowa lub opcjonalna. Zasady kodowania (SOAP encoding rules) - możliwość definiowania typów wykorzystywanych przez aplikację. Reprezentacja RPC (SOAP RPC representation) - określa reguły opisu zdalnych procedur i ich odpowiedzi. Bartłomiej Świercz Simple Object Access Protocol Wiadomość SOAP Wiadomość jest podstawową komunikacją jednokierunkową pomiędzy nadawcą, a odbiorcą. Wiadomość SOAP może wykorzystać różne protokoły jako medium transportowe (np. HTTP). Aplikacja SOAP, która odebrała wiadomość SOAP musi ją przetworzyć zgodnie z zasadami: Rozpoznać wszystkie części wiadomości. Zdecydować, czy wszystkie części wiadomości są wspierane przez aplikację. Jeżeli aplikacja nie jest adresatem wiadomości to musi ją przekazać do adresata. Bartłomiej Świercz Simple Object Access Protocol Przykładowa wiadomość SOAP Wiadomość SOAP osadzona w HTTP - rządanie 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> Bartłomiej Świercz Simple Object Access Protocol Przykładowa wiadomość SOAP Wiadomość SOAP osadzona w HTTP - odpowiedź 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> Bartłomiej Świercz Simple Object Access Protocol Budowa wiadomości SOAP Wiadomość SOAP jest dokumentem XML zawierającym elementy: Wymagane elementy koperty, które identyfikują dokument XML jako wiadomość SOAP. Opcjonalny nagłówek. Wymagany element Body, który zawiera informacje żądającego lub odpowiadającego na wiadomość. Opcjonalny element Fault opisujący błędy mogące pojawić się podczas przetwarzania wiadomości. Bartłomiej Świercz Simple Object Access Protocol Składnia wiadomości SOAP Wiadomość SOAP musi być zapisana przy użyciu XML. Wiadomość SOAP musi zawierać przestrzeń nazw SOAP Envelope. Wiadomość SOAP musi zawierać przestrzeń nazw SOAP Encoding. Wiadomość SOAP nie może zawierać definicji DTD. Wiadomość SOAP nie może zawierać instrukcji przetwarzania XML. Bartłomiej Świercz Simple Object Access Protocol Szkielet wiadomości SOAP <?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:Header> . . . </soap:Header> <soap:Body> . . . <soap:Fault> . . . </soap:Fault> </soap:Body> </soap:Envelope> Bartłomiej Świercz Simple Object Access Protocol Koperta wiadomości SOAP Koperta wiadomości SOAP jest jednocześnie głównym (root) elementem dokumentu XML. Definiuje dokument XML jako wiadomość SOAP. Struktura koperty <?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"> . . . . . . Miejsce na wiadomość. </soap:Envelope> Koperta zawsze musi być skojarzona z przestrzenią nazw http://www.w3.org/2001/12/soap-envelope. Bartłomiej Świercz Simple Object Access Protocol Atrybut encodingStyle Atrybut encodingStyle jest używany do zdefiniowania typów używanych w wiadomości. Wiadomość SOAP nie ma domyślnego kodowania. Bartłomiej Świercz Simple Object Access Protocol Element Header Opcjonalny element Header zawiera informacje specyficzne dla aplikacji (autoryzacja, transakcje itd.). Jeżeli element Header jest obecny w wiadomości to musi być pierwszym potomkiem elementu Envelope. Bartłomiej Świercz Simple Object Access Protocol Element Body Element Body jest wymagany w każdej wiadomości SOAP. Elementy potomne elementu Body mogą być umieszczone w innej przestrzeni nazw. Specyfikacja SOAP definiuje tylko jeden element potomny umieszczony w domyślnej przestrzeni nazw. Jest to element Fault. Bartłomiej Świercz Simple Object Access Protocol Element Body Przykład zapytania <? xml v e r s i o n=" 1.0 " ?> <s o a p : E n v e l o p e x m l n s : s o a p=" http: // www . w3 . org /2001/12/ soap - envelope " s o a p : e n c o d i n g S t y l e=" http: // www . w3 . org /2001/12/ soap - encoding "> <s o a p : B o d y> <m : G e t P r i c e xmlns:m=" http: // www . w3schools . com / prices "> <m : I tem>A p p l e s</ m : I tem> </ m : G e t P r i c e> </ s o a p : B o d y> </ s o a p : E n v e l o p e> Bartłomiej Świercz Simple Object Access Protocol Element Body Przykład odpowiedzi <? xml v e r s i o n=" 1.0 " ?> <s o a p : E n v e l o p e x m l n s : s o a p=" http: // www . w3 . org /2001/12/ soap - envelope " s o a p : e n c o d i n g S t y l e=" http: // www . w3 . org /2001/12/ soap - encoding "> <s o a p : B o d y> <m : G e t P r i c e R e s p o n s e xmlns:m=" http: // www . w3schools . com / prices "> <m : P r i c e>1 . 9 0</ m : P r i c e> </ m : G e t P r i c e R e s p o n s e> </ s o a p : B o d y> </ s o a p : E n v e l o p e> Bartłomiej Świercz Simple Object Access Protocol Element Fault Informacja o błędzie dotyczącym wiadomości SOAP przekazywana jest wewnątrz elementu Fault. Element Fault musi być potomkiem elementu Body i może wystąpić tylko raz w dokumencie. Przykład: <SOAP−E N V : E nv el o pe xmlns:SOAP−ENV=" http: // schemas . xmlsoap . org / soap / envelope / "> <SOAP−ENV:Body> <SOAP−E N V : Fa ul t> < f a u l t c o d e> SOAP−ENV:MustUnderstand </ f a u l t c o d e> < f a u l t s t r i n g> SOAP Must U n d e r s t a n d E r r o r </ f a u l t s t r i n g> </SOAP−E N V : Fa ul t> </SOAP−ENV:Body> </SOAP−E N V : E nv el o pe> Bartłomiej Świercz Simple Object Access Protocol Element Fault Informacja o błędzie dotyczącym wiadomości SOAP przekazywana jest wewnątrz elementu Fault. Element Fault musi być potomkiem elementu Body i może wystąpić tylko raz w dokumencie. Przykład: <SOAP−E N V : E nv el o pe xmlns:SOAP−ENV=" http: // schemas . xmlsoap . org / soap / envelope / "> <SOAP−ENV:Body> <SOAP−E N V : Fa ul t> < f a u l t c o d e> SOAP−ENV:MustUnderstand </ f a u l t c o d e> < f a u l t s t r i n g> SOAP Must U n d e r s t a n d E r r o r </ f a u l t s t r i n g> </SOAP−E N V : Fa ul t> </SOAP−ENV:Body> </SOAP−E N V : E nv el o pe> Bartłomiej Świercz Simple Object Access Protocol Elementy potomne elementu Fault Element Fault może mieć zagnieżdżone elementy: Element: Opis: <faultcode> Kod identyfikujący błąd. <faultstring> Czytelny opis kodu. <faultactor> Informacja o tym co wywołało błąd. <detail> Dodatkowe informacje o błędzie. Bartłomiej Świercz Simple Object Access Protocol Kody błędów Kod: VersionMismatch MustUnderstand Client Server Opis: Nieprawidłowa przestrzeń nazw dla elementu Envelope. Odbiorca wiadomości nie zrozumiał elementu, który miał ustawiony atrybut mustUnderstand. Wiadomość została nieprawidłowo zbudowana lub zawiera niepoprawne dane. Wystąpił błąd podczas pracy serwera. Bartłomiej Świercz Simple Object Access Protocol