Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00319 007926 11008025 na godz. na dobę w sumie
Ajax. Zaawansowane programowanie - książka
Ajax. Zaawansowane programowanie - książka
Autor: , , Liczba stron: 432
Wydawca: Helion Język publikacji: polski
ISBN: 83-246-0567-3 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> ajax
Porównaj ceny (książka, ebook, audiobook).

Napisz ergonomiczne i wydajne aplikacje internetowe

Dynamiczny rozwój internetu, języka HTML, technologii serwerowych i multimedialnych sprawił, że witryny WWW stały się dziełami sztuki, wypełnionymi animacjami, grafiką i dźwiękiem. Nadal jednak po kliknięciu łącza lub przycisku nawigacyjnego musimy czekać na załadowanie się nowej treści z serwera. Bazując na języku JavaScript i jego możliwości stosowania asynchronicznych żądań HTTP służących do pobierania danych z serwera bez konieczności przeładowania strony WWW, opracowano technologię, która pozwala na wyeliminowanie tej niedogodności. Nosi nazwę Ajax, a po jej zastosowaniu witryny i aplikacje WWW pod względem obsługi coraz bardziej przypominają tradycyjne programy.

Książka 'Ajax. Zaawansowane programowanie' opisuje możliwości technologii i sposoby tworzenia aplikacji internetowych z jej zastosowaniem. Czytając ją, dowiesz się, jak powstał Ajax i gdzie jest wykorzystywany. Zrozumiesz, na czym polega technika 'ukrytej ramki' i pobierania danych w tle, a także poznasz wzorce projektowe dla aplikacji budowanych w oparciu o Ajax. Nauczysz się przetwarzać pliki XML, pobierać kanały RSS i tworzyć usługi sieciowe wykorzystujące protokół SOAP. Napiszesz przeglądarkę poczty i komponenty noszące nazwę widgetów, które będziesz mógł zastosować na innych witrynach WWW. Znajdziesz tu również informacje o najpopularniejszych frameworkach wspomagających pracę twórców aplikacji Ajax.

Zdobądź praktyczną wiedzę niezbędną do tworzenia aplikacji Ajax.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREœCI SPIS TREœCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOœCIACH O NOWOœCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Koœciuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl Ajax. Zaawansowane programowanie Autorzy: Nicholas C. Zakas, Jeremy McPeak, Joe Fawcett T³umaczenie: Jaromir Senczyk ISBN: 83-246-0567-3 Tytu³ orygina³u: Professional Ajax Format: B5, stron: 432 Napisz ergonomiczne i wydajne aplikacje internetowe (cid:129) Poznaj metody komunikacji w technologii Ajax (cid:129) Wykorzystaj wzorce projektowe (cid:129) Stwórz komponenty i stosuj je w swoich projektach Dynamiczny rozwój internetu, jêzyka HTML, technologii serwerowych i multimedialnych sprawi³, ¿e witryny WWW sta³y siê dzie³ami sztuki, wype³nionymi animacjami, grafik¹ i dŸwiêkiem. Nadal jednak po klikniêciu ³¹cza lub przycisku nawigacyjnego musimy czekaæ na za³adowanie siê nowej treœci z serwera. Bazuj¹c na jêzyku JavaScript i jego mo¿liwoœci stosowania asynchronicznych ¿¹dañ HTTP s³u¿¹cych do pobierania danych z serwera bez koniecznoœci prze³adowania strony WWW, opracowano technologiê, która pozwala na wyeliminowanie tej niedogodnoœci. Nosi nazwê Ajax, a po jej zastosowaniu witryny i aplikacje WWW pod wzglêdem obs³ugi coraz bardziej przypominaj¹ tradycyjne programy. Ksi¹¿ka „Ajax. Zaawansowane programowanie” opisuje mo¿liwoœci technologii i sposoby tworzenia aplikacji internetowych z jej zastosowaniem. Czytaj¹c j¹, dowiesz siê, jak powsta³ Ajax i gdzie jest wykorzystywany. Zrozumiesz, na czym polega technika „ukrytej ramki” i pobierania danych w tle, a tak¿e poznasz wzorce projektowe dla aplikacji budowanych w oparciu o Ajax. Nauczysz siê przetwarzaæ pliki XML, pobieraæ kana³y RSS i tworzyæ us³ugi sieciowe wykorzystuj¹ce protokó³ SOAP. Napiszesz przegl¹darkê poczty i komponenty nosz¹ce nazwê widgetów, które bêdziesz móg³ zastosowaæ na innych witrynach WWW. Znajdziesz tu równie¿ informacje o najpopularniejszych frameworkach wspomagaj¹cych pracê twórców aplikacji Ajax. (cid:129) Struktura aplikacji Ajax (cid:129) Komunikacja aplikacji Ajax z serwerem (cid:129) Wzorce projektowe (cid:129) Przetwarzanie plików XML (cid:129) Tworzenie us³ug WWW (cid:129) Korzystanie z JSON (cid:129) Tworzenie widgetów (cid:129) Frameworki dla Ajaksa Zdob¹dŸ praktyczn¹ wiedzê niezbêdn¹ do tworzenia aplikacji Ajax O autorach ....................................................................................................................................................9 Wprowadzenie ............................................................................................................................................ 11 Rozdział 1. Czym jest Ajax? ....................................................................................................................... 17 Narodziny Ajax ............................................................................................................. 18 Ewolucja sieci WWW ..................................................................................................... 18 JavaScript .............................................................................................................. 19 Ramki .................................................................................................................... 19 Technika ukrytej ramki ............................................................................................. 19 Dynamiczny HTML i model DOM ............................................................................... 20 Ramki iframe .......................................................................................................... 20 XMLHttp ................................................................................................................. 21 Prawdziwy Ajax ............................................................................................................. 21 Zasady tworzenia aplikacji Ajax ...................................................................................... 22 Technologie używane przez Ajax ..................................................................................... 23 Kto używa technologii Ajax? .......................................................................................... 24 Google Suggest ...................................................................................................... 24 Gmail ..................................................................................................................... 25 Google Maps .......................................................................................................... 26 A9 ......................................................................................................................... 27 Yahoo! News .......................................................................................................... 28 Bitflux Blog ............................................................................................................. 29 Kontrowersje i nieporozumienia ..................................................................................... 29 Podsumowanie ............................................................................................................ 31 Rozdział 2. Podstawy Ajax ........................................................................................................................33 Elementarz HTTP .......................................................................................................... 33 Żądania HTTP ......................................................................................................... 34 Odpowiedzi HTTP .................................................................................................... 36 Techniki komunikacyjne Ajax ......................................................................................... 37 Technika ukrytej ramki ............................................................................................. 37 Żądania wysyłane przez obiekt XMLHttp .................................................................... 51 4 Ajax. Zaawansowane programowanie Dalsze rozważania ........................................................................................................ 62 Polityka tego samego pochodzenia ........................................................................... 62 Sterowanie buforowaniem ........................................................................................ 63 Podsumowanie ............................................................................................................ 64 Rozdział 3. Wzorce Ajax ...........................................................................................................................65 Wprowadzenie .............................................................................................................. 65 Wzorce sterowania komunikacją .................................................................................... 66 Pobieranie predykcyjne ............................................................................................ 66 Przykład wstępnego ładowania strony ....................................................................... 67 Dławienie wysyłania ................................................................................................ 74 Przykład stopniowej kontroli zawartości formularza .................................................... 75 Przykład stopniowej weryfikacji pola .......................................................................... 83 Okresowe odświeżanie ............................................................................................ 86 Przykład powiadamiania o nowym komentarzu ........................................................... 87 Ładowanie wieloetapowe ......................................................................................... 92 Przykład łączy prowadzących do dodatkowych informacji ............................................. 92 Wzorce zachowania w przypadku błędu .......................................................................... 95 Odwoływanie oczekujących żądań ............................................................................. 95 Wzorzec ponownej próby .......................................................................................... 97 Podsumowanie ............................................................................................................ 98 Rozdział 4. XML, XPath i XSLT ..................................................................................................................101 Obsługa XML w przeglądarkach ................................................................................... 101 XML DOM w przeglądarce IE .................................................................................. 101 XML DOM w przeglądarce Firefox ............................................................................ 111 XML w różnych przeglądarkach ............................................................................... 115 Przykład wykorzystania XML ................................................................................... 116 Obsługa XPath w przeglądarkach ................................................................................. 123 Wprowadzenie do XPath ........................................................................................ 123 XPath w przeglądarce IE ......................................................................................... 124 Posługiwanie się przestrzeniami nazw ..................................................................... 125 XPath w przeglądarce Firefox .................................................................................. 128 Funkcja rozwiązująca przedrostki przestrzeni nazw ................................................... 129 XPath w różnych przeglądarkach ............................................................................. 130 Obsługa przekształceń XSL w przeglądarkach ............................................................... 132 Wprowadzenie do XSLT .......................................................................................... 132 XSLT w przeglądarce IE .......................................................................................... 135 XSLT w przeglądarce Firefox ................................................................................... 139 XSLT w różnych przeglądarkach .............................................................................. 141 Przykład z bestsellerami raz jeszcze ....................................................................... 141 Podsumowanie .......................................................................................................... 144 Rozdział 5. Syndykacja treści — RSS/Atom ........................................................................................ 147 RSS .......................................................................................................................... 147 RSS 0.91 ............................................................................................................. 148 RSS 1.0 ............................................................................................................... 149 RSS 2.0 ............................................................................................................... 150 Atom ......................................................................................................................... 150 FOOReader.NET ......................................................................................................... 151 Komponenty po stronie klienta ............................................................................... 152 Komponenty serwera ............................................................................................. 162 Wiązanie klienta z serwerem .................................................................................. 169 Spis treści 5 Konfiguracja .............................................................................................................. 176 Testowanie ................................................................................................................ 177 Podsumowanie .......................................................................................................... 179 Rozdział 6. Usługi WWW ...........................................................................................................................181 Technologie ............................................................................................................... 181 SOAP ................................................................................................................... 181 WSDL .................................................................................................................. 184 REST ................................................................................................................... 188 Platforma .NET i SOAP ................................................................................................ 191 Decyzje podczas projektowania ................................................................................... 191 Tworzenie usługi WWW w Windows .............................................................................. 192 Wymagania systemowe ......................................................................................... 192 Konfiguracja serwera IIS ........................................................................................ 193 Tworzenie kodu ..................................................................................................... 194 Tworzenie kodu wykonywalnego .............................................................................. 196 Usługi WWW i Ajax ...................................................................................................... 199 Tworzenie środowiska testowego ............................................................................ 200 Rozwiązanie dla przeglądarki Internet Explorer ......................................................... 201 Rozwiązanie dla przeglądarki Mozilla ....................................................................... 203 Rozwiązanie uniwersalne ....................................................................................... 206 Usługi WWW pomiędzy domenami ............................................................................... 208 Interfejs usług Google ........................................................................................... 208 Konfiguracja proxy ................................................................................................. 209 Podsumowanie .......................................................................................................... 213 Rozdział 7. JSON ...................................................................................................................................... 215 Czym jest JSON? ........................................................................................................ 215 Literały tablic ........................................................................................................ 215 Literały obiektów ................................................................................................... 216 Literały mieszane .................................................................................................. 217 Składnia JSON ...................................................................................................... 218 Kodowanie i dekodowanie danych JSON ................................................................. 219 JSON kontra XML ....................................................................................................... 219 Narzędzia JSON działające na serwerze ........................................................................ 221 JSON-PHP ............................................................................................................. 221 Inne narzędzia ...................................................................................................... 223 Pole tekstowe z automatycznymi podpowiedziami ......................................................... 223 Przegląd funkcjonalności ....................................................................................... 224 HTML ................................................................................................................... 224 Tabela bazy danych ............................................................................................... 226 Architektura .......................................................................................................... 227 Klasy ................................................................................................................... 228 Kontrolka AutoSuggestControl ................................................................................ 228 Dostawca podpowiedzi .......................................................................................... 245 Komponent serwera .............................................................................................. 247 Komponent klienta ................................................................................................ 248 Podsumowanie .......................................................................................................... 250 6 Ajax. Zaawansowane programowanie Rozdział 8. Widgety WWW ...................................................................................................................... 251 W telegraficznym skrócie ............................................................................................ 251 Komponent serwera .............................................................................................. 252 Komponent klienta ................................................................................................ 253 Styl wiadomości .................................................................................................... 261 Implementacja widgetu paska wiadomości .............................................................. 263 Widget informacji pogodowych ..................................................................................... 264 Weather.com SDK ................................................................................................. 264 Komponent serwera .............................................................................................. 265 Komponent klienta ................................................................................................ 273 Pobieranie danych z serwera .................................................................................. 273 Indywidualizacja widgetu pogody ............................................................................. 274 Wdrożenie widgetu informacji pogodowych .............................................................. 278 Widget wyszukiwania .................................................................................................. 279 Komponent serwera .............................................................................................. 280 Komponent klienta ................................................................................................ 281 Indywidualizacja widgetu wyszukiwania ................................................................... 286 Wdrożenie widgetu wyszukiwania w sieci ................................................................. 288 Widget przeszukiwania witryny ..................................................................................... 289 Komponent serwera .............................................................................................. 290 Komponent klienta ................................................................................................ 296 Indywidualizacja widgetu przeszukiwania witryny ...................................................... 301 Wdrożenie widgetu przeszukiwania ......................................................................... 303 Podsumowanie .......................................................................................................... 304 Rozdział 9. AjaxMail ............................................................................................................................... 305 Wymagania ................................................................................................................ 305 Architektura ............................................................................................................... 306 Wykorzystane zasoby ............................................................................................. 306 Tabele bazy danych ............................................................................................... 307 Plik konfiguracyjny ................................................................................................. 308 Klasa AjaxMailbox ................................................................................................. 309 Wykonywanie akcji ................................................................................................ 331 Interfejs użytkownika .................................................................................................. 337 Widok katalogu ..................................................................................................... 340 Widok odczytu ...................................................................................................... 342 Widok kompozycji .................................................................................................. 344 Układ ................................................................................................................... 346 Kompletowanie aplikacji ............................................................................................. 346 Funkcje pomocnicze .............................................................................................. 348 Mailbox ................................................................................................................ 349 Funkcje wywoływane zwrotnie ................................................................................. 367 Procedury obsługi zdarzeń ..................................................................................... 369 Ostatni etap .............................................................................................................. 370 Podsumowanie .......................................................................................................... 370 Rozdział 10. Szkielety Ajax ...................................................................................................................... 371 JPSpan ...................................................................................................................... 372 Jak to działa? ....................................................................................................... 372 Instalacja JPSpan .................................................................................................. 372 Tworzenie strony na serwerze ................................................................................. 373 Spis treści 7 Tworzenie strony na kliencie .................................................................................. 379 Obsługa błędów .................................................................................................... 382 Translacja typów ................................................................................................... 384 Podsumowanie JPSpan .......................................................................................... 385 DWR ......................................................................................................................... 386 Jak to działa? ....................................................................................................... 386 Instalacja DWR ..................................................................................................... 386 Tworzenie strony na kliencie .................................................................................. 390 Korzystanie z własnych klas ................................................................................... 391 Obsługa błędów .................................................................................................... 395 Jeszcze o dwr.xml ................................................................................................. 395 Konwertery ........................................................................................................... 397 Podsumowanie DWR ............................................................................................. 398 Ajax.NET .................................................................................................................... 398 Jak to działa? ....................................................................................................... 398 Instalacja Ajax.NET ................................................................................................ 399 Tworzenie strony WWW .......................................................................................... 400 Typy proste i złożone ............................................................................................. 407 Stan sesji ............................................................................................................. 409 Podsumowanie Ajax.NET ........................................................................................ 410 Podsumowanie .......................................................................................................... 410 Skorowidz ................................................................................................................................................ 413 Gdy XML rozpowszechnił się po roku 2000, biznes, programiści i wszyscy zainteresowani poszukiwali nowych sposobów jego użycia. XML spełnił obietnicę oddzielenia treści od prezentacji, ale w jaki sposób można było wykorzystać tę zaletę? Odpowiedzią okazały się usługi WWW. Usługi WWW umożliwiają wymianę danych pomiędzy aplikacjami i serwerami. Komuni- kacja ta odbywa się w ten sposób, że usługi WWW wymieniają Internetem komunikaty złożone z danych XML pomiędzy konsumentem (aplikacją, która używa tych danych) a do- stawcą (serwerem udostępniającym dane). Ten sposób komunikacji różni się od tradycyj- nych modeli rozproszonego przetwarzania, takich jak CORBA, DCOM i RMI, które pole- gają na zdalnym wywoływaniu metod za pośrednictwem połączeń sieciowych. W przypad- ku usług WWW główna różnica polega na tym, że w sieci przesyłane są dane XML zamiast danych binarnych. Usługi WWW mają być programowymi komponentami dostępnymi dla dowolnej aplikacji. Niezależnie od tego, czy będzie to aplikacja WWW czy aplikacja tradycyjna, będzie mogła użyć tej samej usługi do wykonania tego samego zadania. Usługi WWW nie są pojedynczą technologią ani osobną platformą. Stanowią w rzeczywi- stości kombinację wielu protokołów, języków i formatów. Obecnie są oferowane jako komponent kilku różnych platform, ale podstawowy sposób działania jest zawsze taki sam. SOAP SOAP stanowi połączenie języka opartego na XML i dowolnej liczby protokołów przesyła- nia danych. Specyfikacja SOAP przedstawia skomplikowany język składający się z wielu elementów i atrybutów pomyślany jako sposób opisu większości typów danych. Informacje 182 Ajax. Zaawansowane programowanie zapisane w tym języku mogą być przesyłane za pomocą wielu różnych protokołów, ale naj- częściej są wysyłane przy użyciu protokołu HTTP wraz z innymi danymi WWW. SOAP jest skrótem od Simple Object Access Protocol. Istnieją dwa podstawowe sposoby korzystania z SOAP, styl RPC (remote procedure call) i styl dokumentowy. Styl RPC W tym stylu usługa WWW jest traktowana jak obiekt zawierający jedną lub więcej metod (w podobny sposób korzysta się z lokalnej klasy do nawiązania połączenia z bazą danych). Żądanie wykonuje się, podając nazwę metody i jej ewentualne parametry. Metoda zostaje wykonana przez serwer, który wysyła odpowiedź XML zawierającą wynik lub komunikat o błędzie. Wyobraźmy sobie usługę WWW wykonującą proste działania arytmetyczne: do- dawanie, odejmowanie, mnożenie i dzielenie. Parametrami każdej z metod są dwie wartości liczbowe. Używając stylu RPC, żądanie wykonania dodawania będzie mieć następującą postać: ?xml version= 1.=lvoniosonn=l utf-=l ? riap:Eo vmipvl?xmor:riapn=lhuup://rnhvxar1?xmriap1ien/riap/vo vmipv/= lllllllllllllllriap:voniosonSuymvn=lhuup://rnhvxar1?xmriap1ien/riap/vonioson/=? llll riap:Bioy? llllllll w:aool?xmor:wn=lhuup://www1wei?1nix/rve snvr/xauh=? llllllllllll w:ip ?415 /w:ip ? llllllllllll w:ip2?514 /w:ip2? llllllll /w:aoo? llll /riap:Bioy? /riap:Eo vmipv? Gdy tworzy i rozpowszechniamy złożone dokumenty XML, powinniśmy pomyśleć o zastoso- waniu przestrzeni nazw. Przestrzenie nazw są szczególnie ważne w SOAP, ponieważ doku- menty są w tym przypadku tworzone i wykorzystywane przez różne systemy. Przestrzenią nazw SOAP użytą w powyższym przykładzie jest http://schemas.xmlsoap.org/soap/envelope. Przestrzeń ta obowiązuje dla wersji SOAP 1.1, natomiast w wersji 1.2 używamy przestrzeni http://www.w3.org/2003/05/soap-envelope. Element w:add określa nazwę wywoływanej metody (add) i zawiera kolejną przestrzeń nazw użytą w tym przykładzie, http://www.wrox.com/services/math. Ta przestrzeń jest spe- cyficzna dla wywoływanej usługi i może być dowolnie definiowana przez programistę. Atrybut soap:encodingStyle wskazuje identyfikator URI informujący o sposobie kodowa- nia żądania. Istnieje wiele innych stylów kodowania, takich jak na przykład system typów używany w schematach XML. Opcjonalny element soap:Header można wykorzystać dla przekazania dodatkowych informacji, na przykład związanych z uwierzytelnianiem. Element ten występuje wtedy bezpośrednio przed elementem soap:Body/ . Jeśli żądanie dodania dwóch liczb zostało poprawnie wykonane, to komunikat odpowiedzi może mieć następującą postać: Rozdział 6. n Usługi WWW 183 ?xml version= 1.=lvoniosonn=l utf-=l ? riap:Eo vmipvl?xmor:riapn=lhuup://rnhvxar1?xmriap1ien/riap/vo vmipv/= lllllllllllllllriap:voniosonSuymvn=lhuup://rnhvxar1?xmriap1ien/riap/vonioson/=? llll riap:Bioy? llllllll w:aooRvrpiorvl?xmor:wn=lhuup://www1wei?1nix/rve snvr/xauh=? llllllllllll w:aooRvr mu?919 /w:aooRvr mu? llllllll /w:aooRvrpiorv? llll /riap:Bioy? /riap:Eo vmipv? Jak łatwo zauważyć, format odpowiedzi przypomina format żądania. Standardowy sposób dostarczania wyniku polega na tworzeniu elementu, którego nazwa jest nazwą metody z przy- rostkiem Response. W tym przykładzie elementem tym jest w:addResponse/ należący do tej samej przestrzeni nazw co element w:add/ żądania. Natomiast sam wynik umieszczony został w elemencie w:addResult/ . Zwróćmy uwagę, że nazwy wszystkich wymienionych elementów są definiowane przez programistę. Jeśli podczas przetwarzania żądania SOAP przez serwer wystąpił błąd, to odpowiedź będzie zawierać element soap:Fault . Na przykład, jeśli pierwszy parametr operacji dodawania okazał się literą zamiast liczbą, to odpowiedź serwera może wyglądać następująco: ?xml version= 1.=lvoniosonn=l utf-=l ? riap:Eo vmipvl?xmor:riapn=lhuup://rnhvxar1?xmriap1ien/riap/vo vmipv/=? llll riap:Bioy? llllllll soap:Fault llllllllllll faultcode soap:Client /faultcode llllllllllll faultstring Serwer nie mógł odczyta audaniai lllllllllllllllllllllllllŁańcuch wejściowy jest niepoprawnyi lllllllllllllllllllllllllBłud w dokumencie XML (4, 13)i llllllllllll /faultstring llllllllllll detail/ llllllll /soap:Fault llll /riap:Bioy? /riap:Eo vmipv? Odpowiedź może zawierać tylko jeden element soap:Fault , który przekazuje informacje o zaistniałym problemie. Najwięcej mówi nam informacja umieszczona w elemencie faultcode/ . Może on przyjmować kilka wartości, z których najczęściej spotykane to so- ap:Server i soap:Client. Kod soap:Server może wskazywać na przykład brak możliwości połączenia serwera z bazą danych. W tym przypadku ponowne wysłanie żądanie może przynieść oczekiwany rezultat. Natomiast błąd soap:Client oznacza najczęściej, że żąda- nie zostało niepoprawnie sformatowane i nie zostanie wykonane bez wprowadzenia odpo- wiednich modyfikacji. Element faultstring/ jest komunikatem o błędzie zawierającym bardziej szczegółowe informacje, specyficzne dla danej aplikacji. Jeśli przyczyną błędu jest inny system, na przy- kład baza danych, to informacja o będzie może zostać zwrócona w opcjonalnym elemencie faultactor/ (element ten nie został użyty w naszym przykładzie). 184 Ajax. Zaawansowane programowanie Styl dokumentowy Ten styl wykorzystuje schematy XML do określenia formatu żądania i odpowiedzi. Zdo- bywa on coraz większą popularność i niektórzy uważają, że w końcu wyeliminuje styl RPC. Wyjaśnienie powodów, dla których programiści rezygnują z użycia stylu RPC, można znaleźć na stronie http://msdn.microsoft.com/library/en-us/dnsoap/html/argsoape.asp. Żądanie wykorzystujące omawiany styl nie musi różnić się od żądań stylu RPC. Na przy- kład żądanie RPC przedstawione w poprzednim podrozdziale mogłoby zostać poprawnym żądaniem stylu dokumentowego, gdyby usunąć atrybut soap:encodingStyle. Podstawowa różnica pomiędzy oboma stylami polega na tym, że żądania RPC muszą zawsze mieć element nazwy metody zawierający jej parametry, podczas gdy styl dokumentowy nie wprowadza takich ograniczeń. Oto przykład żądania w tym stylu różniący się całkowicie od żądań w stylu RPC: ?xml version= 1.=lvoniosonn=l utf-=l ? riap:Eo vmipvl?xmor:riapn=lhuup://rnhvxar1?xmriap1ien/riap/vo vmipv/=? llll riap:Bioy? llll w:add xmlns:w= http://wwwiwroxicom/services/math op1= 4i5 op = 5i4 / llll /riap:Bioy? /riap:Eo vmipv? Zauważmy, że pogrubiony wiersz zawiera nazwę metody (add) i jej dwa parametry (op1 i op2), wszystko w jednym elemencie. Taka konstrukcja nie jest możliwa w stylu RPC. Styl dokumentowy jest bardziej elastyczny dzięki zastosowaniu schematu XML. Usługa WWW może używać schematu XML do kontroli poprawności żądania. Podobna sytuacja ma miejsce w przypadku odpowiedzi — mogą one przypominać odpowiedzi w stylu RPC bądź różnić się od nich zupełnie. Odpowiedzi wykorzystują również schematy XML. Usługi WWW tworzone przy wykorzystaniu Visual Studio .NET używają domyślnie stylu dokumentowego (można to zmienić, stosując odpowiednie atrybuty w uzyskanym kodzie). Po przeczytaniu tych informacji z pewnością zadajesz sobie pytanie, gdzie przechowywany jest schemat XML i w jaki sposób jest on dostępny zarówno dla klienta, jak i usługi. Od- powiedzią na to pytanie jest kolejny skrót: WSDL. WSDL WSDL (Web Services Description Language) jest kolejnym językiem opartym na XML. Opisuje on sposób użycia usługi WWW. Jego specyfikacja opisuje złożony język, niezwy- kle elastyczny i zaprojektowany tak, by jak najwięcej kodu można było ponownie wyko- rzystać. Dokumenty w tym języku rzadko są tworzone ręcznie. Zwykle początkowa wersja dokumentu XSDL jest tworzona za pomocą odpowiedniego narzędzia, a dopiero potem ręcznie modyfikowana, jeśli jest to jeszcze konieczne. Poniżej przedstawiamy plik XSDL opisujący prostą usługę matematyczną z jedną metodą dodawania (którą stworzymy w dalszej części rozdziału): ?xml version= 1.=lvoniosonn=l utf-= ? wrom:ovtsosusior Rozdział 6. n Usługi WWW 185 llll?xmor:huupn=lhuup://rnhvxar1?xmriap1ien/wrom/huup/= llll?xmor:riapn=lhuup://rnhvxar1?xmriap1ien/wrom/riap/= llll?xmor:rn=lhuup://www1w31ien/2.. /XMLSnhvxa= llll?xmor:uorn=lhuup://www1wei?1nix/rve snvr/xauh= llll?xmor:wromn=lhuup://rnhvxar1?xmriap1ien/wrom/= lllluaenvuNaxvrpanvn=lhuup://www1wei?1nix/rve snvr/xauh=? llll wrom:uypvr? llllllll r:rnhvxalvmvxvouFiexDvta mun=q amstsvo= lllllllllllllllllluaenvuNaxvrpanvn=lhuup://www1wei?1nix/rve snvr/xauh=? llllllllllll r:vmvxvouloaxvn=laoo=? llllllllllllllll r:nixpmv?Typv? llllllllllllllllllll r:rvq vonv? llllllllllllllllllllllll r:vmvxvoulxsoOnn ern= =lxa?Onn ern= =loaxvn=lip =luypvn=lr:tmiau=l/? llllllllllllllllllllllll r:vmvxvoulxsoOnn ern= =lxa?Onn ern= =loaxvn=lip2=luypvn=lr:tmiau=l/? llllllllllllllllllll /r:rvq vonv? llllllllllllllll /r:nixpmv?Typv? llllllllllll /r:vmvxvou? llllllllllll r:vmvxvouloaxvn=laooRvrpiorv=? llllllllllllllll r:nixpmv?Typv? llllllllllllllllllll r:rvq vonv? llllllllllllllllllllllll r:vmvxvoulxsoOnn ern= =lxa?Onn ern= =loaxvn=laooRvr mu= lllllllllllllllllllllllluypvn=lr:tmiau=l/? llllllllllllllllllll /r:rvq vonv? llllllllllllllll /r:nixpmv?Typv? llllllllllll /r:vmvxvou? llllllll /r:rnhvxa? llll /wrom:uypvr? llll wrom:xvrranvloaxvn=laooSiapIo=? llllllll wrom:paeuloaxvn=lpaeaxvuver=lvmvxvoun=luor:aoo=l/? llll /wrom:xvrranv? llll wrom:xvrranvloaxvn=laooSiapO u=? llllllll wrom:paeuloaxvn=lpaeaxvuver=lvmvxvoun=luor:aooRvrpiorv=l/? llll /wrom:xvrranv?l wrom:pieuTypvloaxvn=lMauhSiap=? llllllll wrom:ipveausioloaxvn=laoo=? llllllllllll wrom:oin xvouausio? llllllllllllZweanalr xęlow nhlmsn l xsvooipe vnsodiwynhluyp ltmiau llllllllllll /wrom:oin xvouausio? llllllllllll wrom:sop ulxvrranvn=luor:aooSiapIo=l/? llllllllllll wrom:i up ulxvrranvn=luor:aooSiapO u=l/? llllllll /wrom:ipveausio? llll /wrom:pieuTypv? llll wrom: soosonloaxvn=lMauhSiap=luypvn=luor:MauhSiap=? llllllll riap: soosonlueaorpieun=lhuup://rnhvxar1?xmriap1ien/riap/huup=lruymvn=loin xvou=l/? llllllll wrom:ipveausioloaxvn=laoo=? llllllllllll riap:ipveausiolriapAnusion=lhuup://www1wei?1nix/rve snvr/xauh/aoo=lruymvn= lllllllllllloin xvou=l/? llllllllllll wrom:sop u? llllllllllllllll riap: ioyl rvn=lmsuveam=l/? llllllllllll /wrom:sop u? llllllllllll wrom:i up u? llllllllllllllll riap: ioyl rvn=lmsuveam=l/? llllllllllll /wrom:i up u? llllllll /wrom:ipveausio? llll /wrom: sooson? llll wrom:rve snvloaxvn=lMauh=? llllllll wrom:oin xvouausio? 186 Ajax. Zaawansowane programowanie llllllllZawsvealdsmdalpeiruynhlt odnjslaeyuxvuyn oynh llllllll /wrom:oin xvouausio? llllllll wrom:pieuloaxvn=lMauhSiap=l soosonn=luor:MauhSiap=? llllllllllll riap:aooevrrlminausion=lhuup://minamhiru/Mauh/Mauh1arx?=l/? llllllll /wrom:pieu? llll /wrom:rve snv? /wrom:ovtsosusior? Analizując zwartość tego pliku, pamiętajmy, że opisuje on tylko prostą usługę dodającą dwie liczby (dla uproszczenia pominęliśmy pozostałe trzy metody, które będziemy imple- mentować). Chociaż przedstawiony plik WSDL jest długi i skomplikowany, to powinieneś rozumieć, co oznaczają jego poszczególne sekcje. Element dokumentu wsdl:definitions obejmuje treść dokumentu i umożliwia deklarację różnych przestrzeni nazw. Kolejny element, wsdl:types/ , zawiera schemat XML wykorzy- stywany przez usługę. Wewnątrz tego elementu znajduje się element s:schema , który opisuje format wszystkich elementów, jakie mogą pojawić się wewnątrz elementu soap:Body/ — zarówno żądania, jak i odpowiedzi. Pierwszym elementem opisanym przez schemat jest add/ . Ponieważ atrybut elementFormee- fault elementu s:schema ma wartość qualified, to przyjmuje się, że element add/ należy do przestrzeni nazw określonej przez atrybut targetNamespace, http://www.wrox.com/services/ math. Następnie zadeklarowane zostało, że element add/ zawiera sekwencję dwóch innych elementów, op1/ i op2/ . Dla obu tych elementów skonfigurowano minOccurs i maxOccurs równe 1, co oznacza, że mogą pojawić się dokładnie jeden raz. Oba mają również atrybut ty- pu s:float, który jest jednym z wbudowanych typów schematów XML. Kompletną listę typów danych dostępnych w schematach XML można znaleźć na stronie www.w3.org/TR/xmlschema-0/#CreateDt. Jeśli usługa wymaga bardziej złożonych typów, to można je określić agregując i ograniczając typy podstawowe. Następnie w schemacie pojawia się kolejny element s:element/ , tym razem opisujący addResponse/ . Element ten będzie mieć jeden element podrzędny, addResult/ , zawie- rający wynik działania (również typu s:float). Na tym kończy się nasz schemat XML. W ciele pliku WSDL znajduje się również krótka sekcja opisująca dwa elementy wsdl: message/ : addSoapIn i addSoapOut. Każdy z tych elementów ma element wsdl:part/ okre- ślający element schematu XML, którego należy użyć. W tym przypadku elementy te odwołują się, odpowiednio, do add i addResponse. Sekcja ta określa format każdego z komunikatów. Kolejna sekcja, wsdl:portType/ , jest używana do pogrupowania elementów wsdl:message w operacje. Operacja będąca jednostkowe działanie usługi zawiera elementy wsdl:input , wsdl:output oraz, opcjonalnie, wsdl:fault . W naszym przykładzie występuje jedna sekcja wsdl:portType/ opisująca wsdl:operation/ o nazwie add. Atrybuty message jej elementów podrzędnych wsdl:input i wsdl:output odwołują się do zdefiniowanych wcześniej elementów wsdl:message . Istnieje również element wsdl:documentation za- wierający słowny opis metody. (Skąd pochodzi ta informacja, dowiemy się w dalszej części rozdziału.) Rozdział 6. n Usługi WWW 187 Kolejnym blokiem jest wsdl: inding . Wiąże on operację z protokołem używanym do komunikacji z usługą. Specyfikacja WSDL opisuje trzy rodzaje wiązań: SOAP, HTTP GET/POST i MIME. W tym rozdziale skoncentrujemy się na wiązaniu SOAP. Wiązanie HTTP GET/POST od- nosi się do sposobu tworzenia adresów URL (w przypadku żądań GET) lub kodowania zawartości formularza (w przypadku żądań POST). Wiązanie MIME umożliwia wyrażenie części komunikatu za pomocą różnych typów MIME. Oznacza to na przykład, że jedna część odpowiedzi może być w XML, a druga w HTML. Więcej informacji o tych sposobach wiązania można znaleźć na stronie www.w3.org/ TR/2003/WD-wsld112-bindings-20020709/. Najpierw atrybut name wiązania otrzymuje wartość MathSoap, a atrybut type wskazuje typ MathSoap zdefiniowany w sekcji wsdl:portType . Następnie element soap: inding/ używa atrybutu transport do określenia, że usługa używa protokołu HTTP. Element wsdl:operation/ definiuje nazwę metody, add. element soap:operation/ zawiera atrybut soapAction, który musi zostać włączony do nagłówka żądania HTTP, a także atrybut style, który informuje, że komunikat SOAP będzie używać stylu dokumentowego, a nie RPC. Główna różnica pomiędzy komunikatem SOAP używającym stylu dokumentowego a komunikatem w stylu RPC polega na tym, że komunikat w stylu dokumentowym wysyłany jest w postaci elementów umieszczonych wewnątrz elementu soap:body , które mogą mieć dowolną strukturę uzgodnioną przez nadawcę i odbiorcę za pomocą dołączonego schematu. Z kolei komunikat w stylu RPC ma element o nazwie odpowiadającej wywoływanej metodzie, który zas ma elementy odpowiadające parametrom metody. Element soap:operation ma dwa elementy podrzędne, wsdl:input i wsdl:output , używane do opisu formatu żądania i odpowiedzi. W naszym przykładzie atrybut use elementu soap: ody otrzymał wartość literal. W praktyce jest to jedyna możliwość w przypadku usług stosujących styl dokumentowy. W przypadku stylu RPC atrybut ten może otrzymać wartość encoded i wtedy element soap: ody musi dokładniej określić sposób kodowania typu parametrów. Ostatnia część dokumentu, wsdl:service/ , jest związana ze sposobem wywołania usługi przez klienta. Zawiera również tekst opisu usługi oraz element wsdl:port/ , który odwołuje się do wiązania MathSoap. Prawdopodobnie najważniejszym elementem w tej części jest soap: address/ , który zawiera atrybut location określający adres URL dostępu do usługi. wrom:rve snvloaxvn=lMauh=? llll wrom:oin xvouausio? llllllllZawsvealdsmdalpeiruynhlt odnjslaeyuxvuyn oynh llll /wrom:oin xvouausio? llll wrom:pieuloaxvn=lMauhSiap=l soosonn=luor:MauhSiap=? llllllll riap:aooevrrlminausion=lhuup://minamhiru/Mauh/Mauh1arx?=l/? llll /wrom:pieu? /wrom:rve snv? Chociaż pierwszy kontakt z plikiem WSDL może wzbudzać lęk, to na szczęście prawie nigdy nie musimy ręcznie tworzyć takiego pliku. Przykład zamieszczony w tym podrozdziale zo- stał automatycznie stworzony przez usługę WWW na platformie .NET, która analizuje kod i generuje niezbędny XML. 188 Ajax. Zaawansowane programowanie Schematy XML stanowią obszerne zagadnienie, którego pełne omówienie wykracza poza zakres tej książki. Jeśli chcesz dowiedzieć się więcej na ten temat, powinieneś rozważyć lekturę książki Beginning XML (Wiley Publishing) lub zapoznać się z informacjami zamieszczonymi na stronie www.w3schools.com/schema/default.asp. REST REST (Representational State Transfer) opisuje sposób wykorzystania istniejącego protokołu HTTP do transmisji danych. Chociaż REST używany jest głównie przez usługi WWW, to można zastosować go w dowolnym systemie pracującym w trybie żądanie-odpowiedź z proto- kołem HTTP. W odniesieniu do usług WWW REST pozwala nam wywołać dany URL w okre- ślonym formacie, aby uzyskać dane (również w określonym formacie). Otrzymane dane mogą zawierać dalsze informacje o tym, w jaki sposób można pobrać więcej danych. W przypadku usług WWW dane te są zwracane jako XML. Załóżmy na przykład, że Wrox chciałby udostępnić możliwość pobierania listy wszystkich autorów. Usługi WWW stosujące REST używają prostych URL dostępu do danych. Za- łóżmy zatem, że listę autorów można będzie pobrać, używając następującego URL: huup://www1wei?1nix/rve snvr/a uhier/ Usługa ta może zwrócić reprezentację autorów w postaci danych XML wraz z informacją o sposobie dostępu do szczegółów o każdym autorze, na przykład: ?xml version= 1.=lvoniosonn=l utf-=l ? a uhierl?xmor:?msodn=huup://www1w31ien/ 999/?msod= lllllllll?xmorn=huup://www1wei?1nix/rve snvr/a uhierf iidr= lllllllll?msod:hevtn=huup://www1wei?1nix/rve snvr/a uhier/=? llll a uhieltievoaxvrn=Msnhavm=lr eoaxvn=Kay= llllllll?msod:hevtn=huup://www1wei?1nix/rve snvr/a uhier/dayx= llllllllson=ldayx=/? llll a uhieltievoaxvrn=Jiv=lr eoaxvn=lFawnvuu= llllllll?msod:hevtn=huup://www1wei?1nix/rve snvr/a uhier/tawnvuuj= llllllllson=ltawnvuuj=/? llll a uhieltievoaxvrn=Jvevxy=lr eoaxvn=lMnPvad= llllllll?msod:hevtn=huup://www1wei?1nix/rve snvr/a uhier/xnpvadj= llllllllson=lxnpvadj=/? llll a uhieltievoaxvn=lNsnhimar=lr eoaxvn=lZadar= llllllll?msod:hevtn=huup://www1wei?1nix/rve snvr/a uhier/ adaro= llllllllson=l adaro=/? llll !ff llllllllMievla uhier llllff? /a uhier? Warto zwrócić uwagę na parę rzeczy w powyższych danych XML. Po pierwsze, deklarują one domyślną przestrzeń nazw http://www.wrox.com/services/authors- ooks i wobec tego każdy element nieposiadający przedrostka, na przykład authors/ , należy do tej przestrzeni. Oznacza to, że element authors/ można odróżnić od innego elementu o tej samej nazwie, ale należą- cego do innej przestrzeni nazw. Identyfikator URI tej przestrzeni, http://www.wrox.com/ services/authors- ooks, został użyty jedynie jako unikalny łańcuch znaków i nie gwarantuje, że w określonej przez niego lokalizacji będą dostępne odpowiednie dane. Należy zwrócić uwagę Rozdział 6. n Usługi WWW 189 na to, że został użyty jako URI (Uniform Resource Identifier), który jest tylko zwykłym identy- fikatorem, a nie URL (Uniform Resource Locator), który określa dostępność zasobu w danej lokalizacji. Po drugie, zwróćmy uwagę na użycie atrybutu href z przestrzeni nazw http://www.w3.org/ 1999/xlink. Wiele usług używających REST stosuje taki sposób zapisu, podczas gdy w HTML użylibyśmy zamiast niego zwykłego hiperłącza. XLink jest sposobem łączenia dokumentów wykraczającym poza możliwości hiperłączy HTML. Umożliwia on specyfikację zależności dwukierunkowych, na skutek czego dokumenty stają się dostępne dla siebie nawzajem, a także określenie sposobu aktywacji łącza — na przykład ręcznie, automatycznie lub po pewnym czasie. Pokrewne rozwiązanie, XPointer, umożliwia specyfikację sekcji dokumentu i ma większe możliwości od prostych łączy HTML. Chociaż oba rozwiązania uzyskały rekomendację W3C, to nie są zbyt rozpowszechnione. Więcej informacji na ich temat można znaleźć na stronie www.w3.org/XML/Linking. Dane XML zwrócone przez usługę REST zostają przekształcone, przez klienta lub przez serwer, na bardziej czytelny format (zwykle HTML), na przykład do takiej postaci: huxm? llll hvao? llllllll usumv?A uie ylWei? /usumv? llll /hvao? llll ioy? llllllll alhevtn=huup://www1wei?1nix/rve snvr/a uhier/dayx=?MsnhavmlKay /a? llllllll alhevtn=huup://www1wei?1nix/rve snvr/a uhier/tawnvuuj=?JivlFawnvuu /a? llllllll alhevtn=huup://www1wei?1nix/rve snvr/a uhier/xnpvadj=?JvevxylMnPvad /a? llllllll alhevtn=huup://www1wei?1nix/rve snvr/a uhier/ adaro=?NsnhimarlZadar /a? llll / ioy? /huxm? Następnie użytkownik może pobrać dane o wybranym autorze, wybierając odpowiednie łącze. W rezultacie usługa WWW zwróci dane XML podobne do poniższych: ?xml version= 1.=lvoniosonn=l utf-=l ? a uhiel?xmor:?msodn=huup://www1w31ien/ 999/?msod= llllllll?xmorn=huup://www1wei?1nix/rve snvr/a uhierf iidr= llllllll?msod:hevtn=huup://www1wei?1nix/rve snvr/a uhier/tawnvuuj= llllllllson=ltawnvuuj=ltievoaxvrn=lJiv=lr eoaxvn=lFawnvuu=? llll iidr? llllllll iid llllllllllll?msod:hevtn=huup://www1wei?1nix/rve snvr/ iidr/. 45 . 3= llllllllllllsr on=. 45 . 3=lusumvn=lBvnsoosonlXML=/? llllllll iid llllllllllll?msod:hevtn=huup://www1wei?1nix/rve snvr/ iidr/.4 - = llllllllllllsr on=.4 - =lusumvn=lPeitvrrsioamlAja?=/? llll / iidr? /a uhie? Po raz kolejny dane XML zawierają elementy należące do przestrzeni nazw http://www. wrox.com/services/authors- ooks, a atrybut xlink:href pozwala dotrzeć do dalszych in- formacji. Reprezentacja tych danych w HTML może wyglądać następująco: 190 Ajax. Zaawansowane programowanie huxm? llll hvao? llllllll usumv?Iotiexanjvlila uie v /usumv? llll /hvao? llll ioy? llllllll p?S n vn łiwvlsotiexanjvli llllllll alhevtn=huup://www1wei?1nix/rve snvr/a uhier/tawnvuuj=?JivlFawnvuu /a? /p? llllllll p?Biidr /p? llllllll alhevtn=huup://www1wei?1nix/rve snvr/ iidr/. 45 . 3=?BvnsoosonlXML /a? llllllll alhevtn=huup://www1wei?1nix/rve snvr/ iidr/.4 - =?PeitvrrsioamlAja? /a? llll / ioy? /huxm? Jeśli użytkownik wybierze ostatnie z łączy na powyższej stronie, to w odpowiedzi uzyska następujące dane XML: ?xml version= 1.=lvoniosonn=l utf-=l ? iidl?xmor:?msodn=huup://www1w31ien/ 999/?msod= lllll?xmorn=huup://www1wei?1nix/rve snvr/a uhierf iidr= lllll?msod:hevtn=huup://www1wei?1nix/rve snvr/ iidr/.4 - = lllllsr on=.4 - =? llll nvoev?Wv lPeineaxxson /nvoev? llll usumv?PeitvrrsioamlAJAX /usumv? llll ovrnespusio?Jadlwydie yruaćlJa aSnespulslXMLloiluwie vosalrueiolWWW llllnhaeaduvey jąnynhlrsęl aawaoriwaoyxlsouvetvjrvxl żyudiwosda1 /ovrnespusio? llll a uhier? llllllll a uhieltievoaxvrn=lNsnhimar=lr eoaxvn=lZadar= llllllllllll?msod:hevtn=huup://www1wei?1nix/rve snvr/a uhier/ adaro= llllllllllllson=l adaro=l/? llllllll a uhieltievoaxvrn=lJvevxy=lr eoaxvn=lMnPvad= llllllllllll?msod:hevtn=huup://www1wei?1nix/rve snvr/a uhier/xnpvadj= llllllllllllson=lxnpvadj=l/? llllllll a uhieltievoaxvrn=lJiv=lr eoaxvn=lFawnvuu= llllllllllll?msod:hevtn=huup://www1wei?1nix/rve snvr/a uhier/tawnvuuj= llllllllllllson=ltawnvuuj=l/? llll /a uhier? / iid? Łatwo zauważyć, że usługi REST stosują powtarzający się wzorzec. Na przykład, jeśli kompletną listę autorów otrzymujemy, używając http://www.wrox.com/services/authors/, to wprowadzenie prostej modyfikacji polegającej na dołączeniu identyfikatora autora pozwala uzyskać informacje o tym autorze (http://www.wrox.com/services/authors/fawcettj). Przedstawioną usługę można zaimplementować na wiele sposobów. Na przykład za pomo- cą statycznych stron WWW lub, co bardziej prawdopodobne, kodu działającego na serwerze, na przykład ASP, JSP lub PHP, który pobierze odpowiednie dane z bazy i zwróci je w forma- cie XML. W tym przypadku adres URL zostanie odwzorowany przez serwer na określony sposób pobrania danych, na przykład wywołanie procedury bazy danych. Więcej informacji na temat usług REST (zwanych również usługami RESTful) można znaleźć na stronie www.network.world.com/ee/2003/eerest.html. Rozdział 6. n Usługi WWW 191 Wprowadzenie SOAP pozwoliło firmie Microsoft objąć przywództwo ruchu związanego z usługami WWW. Po przedstawieniu przez Microsoft firmie IBM rozwiązania SOAP jako sposobu transportu danych również ta druga firma przyłączyła się do tego ruchu, pomaga- jąc w stworzeniu specyfikacji WSDL. Do Microsoftu i IBM dołączyło następnie wiele du- żych firm takich jak Oracle, Sun czy HP. Powstały odpowiednie standardy i na horyzoncie pojawiła się nowa era usług WWW. Obraz ten mącił tylko jeden fakt: nie było narzędzi po- zwalających tworzyć usługi WWW. Wkrótce lukę tę wypełniła platforma .NET. Microsoft wprowadził platformę .NET na początku 2000 roku z myślą o rywalizacji z plat- formą Java w zakresie tworzenia przenośnych aplikacji. Ponieważ platforma .NET po- wstała praktycznie od zera, to możliwe było wprowadzenie odpowiedniej obsługi XML, a także tworzenia i konsumpcji usług WWW używających SOAP i WSDL. Platforma .NET oferuje proste sposoby obudowywania istniejących aplikacji za pomocą usług WWW, jak również udostępniania większości klas .NET jako usług WWW. Tworząc usługę WWW, musimy zdecydować, w jakim stopniu konieczne będą interakcje z SOAP i WSDL. Istnieją narzędzia pozwalające odizolować programistę od wykorzysty- wanej struktury, ale jeśli to konieczne, możliwa jest również modyfikacja jej szczegółów. Wersja platformy .NET wypuszczona w 2005 roku w jeszcze większym stopniu bazuje na XML i usługach WWW. Chociaż platforma .NET ułatwia tworzenie usług WWW, to nie jest w żadnym razie jedy- nym sposobem ich tworzenia. Podobnie jak podczas tworzenia innego oprogramowania także i w tym przypadku musimy podjąć kilka ważnych decyzji na etapie projektowania i implementacji. Przypomnijmy, że usługi WWW stanowią niezależny od platformy sposób żądania i otrzymywania danych i w związku z tym użytkownik usługi nie potrzebuje infor- macji o sposobie implementacji usługi. Niestety, w praktyce należy jednak wziąć pod uwagę następujące kwestie związane z różnymi implementacjami: n Nie wszystkie platformy obsługują te same typy danych. Na przykład wiele usług zwraca zbiór danych ADO.NET. System, który nie implementuje platformy .NET, nie będzie mógł poprawnie zinterpretować tych danych. Podobnie problematyczne może okazać się zastosowanie tablic, ponieważ mogą one być reprezentowane na wiele sposobów. n Niektóre usługi są bardziej tolerancyjne dla dodatkowych lub brakujących nagłówków w żądaniach. Problem ten związany jest z konsumentami usług, którzy nie wysyłają poprawnie wszystkich nagłówków i mogą stanowić zagrożenie dla bezpieczeństwa usługi. Aby rozwiązać te i inne problemy, stworzono Web Services Interoperability Organization. Z jej zadaniami, osiągnięciami i rekomendacjami można zapoznać się pod adresem www.ws-i.org/. 192 Ajax. Zaawansowane programowanie Pierwszą decyzją, którą musimy podjąć, tworząc usługę WWW, jest wybór platformy. Jeśli wybierzemy Windows, to prawie na pewno zdecydujemy się również użyć IIS jako serwera WWW. Usługę będziemy tworzyć przy użyciu ASP.NET lub ASP w przypadku starszych wersji serwera IIS (chociaż ten ostatni sposób jest nieco trudniejszy). W przykładach przed- stawionych w tym rozdziale wykorzystamy ASP.NET. Jeśli wybierzemy UNIX lub Linux, to prawdopodobnie będziemy używać JSP lub PHP. Dla obu systemów istnieją implementacje serwerów WWW należące do kategorii „open source”. Projekt Axis (http://ws.apache.org/axis/) oferuje narzędzia zarówno dla języka Java, jak i C++. Również w przypadku PHP mamy spory wybór, między innymi PhpXMLRPC (http://phpxmlrpc.sourceforge.net/) i Pear SOAP (http://pear.php.net/package/SOAP). Po wyborze języka programowania musimy się zastanowić, kto będzie mieć dostęp do na- szej usługi. Czy tylko nasza aplikacja czy też usługa będzie dostępna publicznie? W tym drugim przypadku musimy wziąć pod uwagę wspomniane wcześniej problemy współpracy. Jeśli zdecydujemy się na pierwszy przypadek, to mamy swobodę korzystania z zalet róż- nych rozszerzeń przez klienta lub serwer. Po stworzeniu usługi WWW należy ją skonsumować. Przez konsumenta usługi rozumiemy dowolną aplikację, która wywołuje naszą usługę. Zwykle konsument działa według nastę- pującego schematu: tworzy żądanie, wysyła je i podejmuje pewne działania na podstawie otrzymanej odpowiedzi. Dokładna metoda implementacji tego schematu zależy od funkcjo- nalności oferowanej użytkownikowi przez konsumenta. Przejdźmy teraz od specyfikacji i teorii do praktyki związanej z implementacją prostej usługi WWW. Będzie ona używać stylu dokumentowego SOAP do implementacji usługi Math opisanej za pomocą pliku WSDL przedstawionego wcześniej w tym rozdziale. Zwróćmy uwagę, że w procesie jej tworzenia zastosujemy darmowe narzędzia udostępnia- ne przez Microsoft, co będzie wymagać nieco większego nakładu pracy niż w przypadku za- stosowania na przykład Visual Studio .NET. Jednak tym razem warto ponieść ten dodatkowy wysiłek, ponieważ zaowocuje on lepszym zrozumieniem usług WWW i zwróci się z na- wiązką w przyszłości, jeśli trafimy na problemy związane z automatycznie wygenerowaną usługą WWW. Wymagania systemowe Stworzenie tej usługi wymagać będzie co najmniej: n Komputera z systemem Windows i działającym na nim serwerem IIS 5 lub nowszym. Jest on dostępny na wszystkich komputerach wyposażonych w system XP Professional i wszystkich serwerach począwszy od Windows 2000. Rozdział 6. n Usługi WWW 193 n .NET Framework zainstalowanej na komputerze, na którym działa IIS, a także .NET SDK (Software Development Kit) na komputerze, na którym będziemy tworzyć kod. Na potrzeby tego przykładu założymy, że będzie to ten sam komputer, na którym działa IIS. (.NET Framework i SDK można załadować ze strony http://msdn.microsoft.com/netframework/downloads/updates/default.aspx.) n Edytor tekstu do pisania kodu. Może być nim nawet Notatnik zainstalowany standardowo na wszystkich komputerach z systemem Windows. Dla potrzeb tego przykładu będzie on więcej niż wystarczający (chociaż w przypadku tworzenia poważniejszych aplikacji z pewnością pomocny będzie edytor o większych możliwościach). Konfiguracja serwera IIS Najpierw musimy utworzyć katalog wirtualny dla naszej usługi. W tym celu wybieramy Start/Ustawienia/Panel sterowania/Narzędzia administracyjne i uruchamiamy Menedżer usług internetowych (alternatywnie możemy wprowadzić SystemRoot System32inetsrviis.smc w oknie Start/Uruchom i wybrać przycisk OK). Po uruchomieniu menedżera rozwijamy drzewo w lewej części okna, aby odnaleźć węzeł Domyślna witryna sieci Web. Prawym przyciskiem myszy rozwijamy menu tego węzła i wybieramy Nowy/Katalog wirtualny, tak jak pokazano na rysunku 6.1. W efekcie uruchomiony zostanie Kreator tworzenia katalo- gów wirtualnych, w którym tworzymy alias katalogu usługi WWW używany przez klienta (patrz rysunek 6.2). Rysunek 6.1. Wpisujemy nazwę Math i wybieramy przycisk Dalej. Na kolejnym ekranie przechodzimy do katalogu serwera IIS, czyli C:InetPubwwwroot. Tworzymy w nim nowy katalog o na- zwie Math. Na pozostałych ekranach kreatora akceptujemy domyślnie wybrane opcje. Na- stępnie, za pomocą Eksploratora Windows, odnajdujemy utworzony katalog Math i two- rzymy w nim podkatalog bin, w którym po skompilowaniu usługi WWW zostanie utwo- rzona biblioteka DLL. Uzyskana hierarchia powinna wyglądać tak jak na rysunku 6.3. 194 Ajax. Zaawansowane programowanie Rysunek 6.2. Rysunek 6.3. Tworzenie kodu Nasza usługa WWW jest bardzo prosta. Ma nazwę Math i implementuje cztery podstawowe działania arytmetyczne: dodawanie, odejmowanie, mnożenie i dzielenie. Każda z tych operacji ma dwa parametry typu float i zwraca wynik takiego samego typu. Samą klasę zaimple- mentujemy w C#, a usługa WWW zostanie opublikowana w ASP.NET. Tworzymy nowy plik w wybranym edytorze i umieszczamy w nim trzy wiersze: rsonlSyruvx; rsonlSyruvx1Wv ; rsonlSyruvx1Wv 1Sve snvr; Rozdział 6. n Usługi WWW 195 Powyższy kod nie wprowadza jeszcze żadnej funkcjonalności, ale oszczędza nam pisania pełnych nazw klas należących do wymienionych przestrzeni nazw. Następnie stworzymy własną przestrzeń nazw Wrox.Services i klasę Math dziedziczącą po System.We .Services.We Service: oaxvrpanvlWei?1Sve snvr { llll[Wv Sve snvl(Dvrnespusiolnl=Zawsvealdsmdalpeiruynhlt odnjslaeyuxvuyn oynh=, Naxvrpanvlnl=huup://www1wei?1nix/rve snvr/xauh=)] llllp msnlnmarrlMauhl:lSyruvx1Wv 1Sve snvr1Wv Sve snv llll{ llllllll//u uajldioldmary llll} } Słowo kluczowe namespace stosuje się w podobny sposób jak przestrzenie nazw w XML. Oznacza to, że pełną nazwą klasy Math jest Wrox.Services.Math. Wewnątrz definicji prze- strzeni nazw umieszczony został atrybut o nazwie We Service. Oznacza on, że klasa w na- stępnym wierszu jest usługą WWW. W ten sposób włączona zostaje dla tej klasy dodatko- wa funkcjonalność polegająca między innymi na generowaniu pliku WSDL. Zwróćmy również uwagę na parametr eescription (który pojawi się także w pliku WSDL). Następnie mamy nazwę klasy, Math, która dziedziczy po klasie bazowej System.We .Services. We Service. Dziedziczenie po tej klasie oznacza, że nie musimy przejmować się tworze- niem kodu specyficznego dla usługi WWW, ponieważ zrobi to za nas klasa bazowa. W ten sposób możemy skoncentrować się na tworzeniu metod, które zostaną udostępnione jako część usługi. Definiowanie metody używanej jako część usługi WWW odbywa się tak jak w przypadku zwykłej metody, z tą różnicą, że musimy oznaczyć ją atrybutem We Method: [Wv Mvuhio(Dvrnespusiolnl=Zweanalr xęlow nhlmsn l xsvooipe vnsodiwynhluyp ltmiau=)] p msnltmiaulaoo(tmiaulip ,ltmiaulip2) { llllevu eolip l+lip2; } Po raz kolejny kod okazuje się bardzo prosty (czy można sobie wyobrazić prostszą operację niż dodawanie?). Każda metoda poprzedzona atrybutem We Method jest uważana za część usługi WWW. Parametr eescription zostanie umieszczony w wygenerowanym pliku WSDL. Chociaż możemy stworzyć dowolną liczbę takich metod, to poniższy przykład za- wiera cztery odpowiadające podstawowym działaniom arytmetycznym: rsonlSyruvx; rsonlSyruvx1Wv ; rsonlSyruvx1Wv 1Sve snvr; oaxvrpanvlWei?1Sve snvr { lllll[Wv Sve snvl(Dvrnespusiolnl=Zawsvealdsmdalpeiruynhlt odnjslaeyuxvuyn oynh=, llllllllllllllllllNaxvrpanvlnl=huup://www1wei?1nix/rve snvr/xauh=)] llllllllp msnlnmarrlMauhl:lSyruvx1Wv 1Sve snvr1Wv Sve snv llllllll{ 196 Ajax. Zaawansowane programowanie llllllll[Wv Mvuhio
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Ajax. Zaawansowane programowanie
Autor:
, ,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: