Rozdział ten przedstawia jeden ze sposobów implementacji usług sieciowych XML i aplikacji klienckich w PHP. Oprogramowanie

Podobne dokumenty
Integracja Obieg Dokumentów - GiS Spis treści

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

SPECYFIKACJA WYMIANY DANYCH POMIĘDZY PROGRAMEM KS-APTEKA WINDOWS I SKLEPEM INTERNETOWYM FIRMY ZEWNĘTRZNEJ

Dostęp do komponentów EJB przez usługi Web Services

1. Uruchomić i skonfigurować środowisko tworzenia aplikacji i serwer aplikacji.

Programowanie komponentowe

Tworzenie i wykorzystanie usług sieciowych

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Laboratorium 1 Wprowadzenie do PHP

Komunikacja i wymiana danych

Zaawansowane aplikacje internetowe. Wykład 6. Wprowadzenie do Web Services. wykład prowadzi: Maciej Zakrzewicz. Web Services

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Technologie internetowe laboratorium nr 4. Instalacja i uruchomienie usługi sieciowej w serwerze Tomcat/AXIS

Sieciowe programowanie rozproszone SOA, WebServices i systemy gridowe. Krzysztof Banaś Systemy rozproszone 1

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Zaawansowane aplikacje internetowe

Aplikacje WWW - laboratorium

Web Services. Wojciech Mazur. 17 marca Politechnika Wrocławska Wydział Informatyki i Zarządzania

Usługi WWW. dr Zbigniew Lipiński Instytut Matematyki i Informatyki ul. Oleska Opole zlipinski@math.uni.opole.pl

Spis treści. Dzień 1. I Wprowadzenie (wersja 0906) II Dostęp do danych bieżących specyfikacja OPC Data Access (wersja 0906) Kurs OPC S7

Simple Object Access Protocol

Podstawy JavaScript ćwiczenia

Programowanie Komponentowe WebAPI

INSTALACJA I KONFIGURACJA SERWERA PHP.

1 Wprowadzenie do J2EE

Wybrane problemy modelu usługowego

Smarty PHP. Leksykon kieszonkowy

Kurs OPC S7. Spis treści. Dzień 1. I OPC motywacja, zakres zastosowań, podstawowe pojęcia dostępne specyfikacje (wersja 1501)

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Aplikacje WWW - laboratorium

Specyfikacja API Runtime BAS 3.0

Specyfikacja techniczna. mprofi Interfejs API

MINISTERSTWO FINANSÓW PLAN INTEGRACJI SYSTEMU ZAŁĄCZNIK NR 6 SEAP SPECYFIKACJA KANAŁ DLA PODMIOTÓW ZEWNĘTRZNYCH PL PROJEKT ECIP/SEAP

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Obiekt navigator. Dodał Administrator wtorek, 16 marzec :32

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

4 Web Forms i ASP.NET Web Forms Programowanie Web Forms Możliwości Web Forms Przetwarzanie Web Forms...152

Zdarzenia Zdarzenia onload i onunload

Wybrane działy Informatyki Stosowanej

Wybrane działy Informatyki Stosowanej

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

Spis treci. Dzie 1. I Wprowadzenie (wersja 0911) II Dostp do danych biecych specyfikacja OPC Data Access (wersja 0911)

Uniwersytet Mikołaja Kopernika w Toruniu Wydział Matematyki i Informatyki Wydział Fizyki, Astronomii i Informatyki Stosowanej Instytut Fizyki

Zaawansowane aplikacje internetowe - laboratorium

Wprowadzenie do projektu QualitySpy

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Odnośniki jeszcze do niedawna odróżniały strony WWW od wszystkich innych dokumentów elektronicznych. Możliwość deklarowania odnośników do innych

OpenLaszlo. OpenLaszlo

Na początku utworzymy formularz w czystym języku HTML i przetestujemy go za pomocą przeglądarki WWW.

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

Programowanie współbieżne i rozproszone

Aplikacje RMI

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

AXIS2 - tworzenie usługi sieciowej i klienta Axis Data Binding. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Technologie sieciowe Sprawozdanie z labolatorium. Lista 5

Rozproszone systemy Internetowe

Kurs walut. Specyfikacja projektu. Marek Zając

PHP: bloki kodu, tablice, obiekty i formularze

Instrukcja konfiguracji funkcji skanowania

Mechanizmy pracy równoległej. Jarosław Kuchta

Funkcje i instrukcje języka JavaScript

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

76.Struktura oprogramowania rozproszonego.

Elektroniczna wymiana danych (EDI) jest to: - wymiana informacji pomiędzy komputerami, z użyciem powszechnie akceptowanych standardów

Generatory pomocy multimedialnych

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Poszczególne elementy serwisu można umieścić dla porządku w odpowiednio przemyślanym drzewie katalogów, i tak: -

XML extensible Markup Language. część 5

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

Zajęcia 4 - Wprowadzenie do Javascript

Programowanie internetowe

Wybrane działy Informatyki Stosowanej

Raport z przebiegu prac czwartej grupy problemowej

Dokumentacja fillup - MS SQL

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15 Artur.Kalinowski@fuw.edu.

Zaawansowane aplikacje internetowe laboratorium

Gatesms.eu Mobilne Rozwiązania dla biznesu

Podstawowe wykorzystanie Hibernate

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Być może jesteś doświadczonym programistą, biegle programujesz w Javie,

World Wide Web? rkijanka

Wielowarstwowe aplikacje internetowe. Web Services. Autorzy wykładu: Maciej Zakrzewicz Marek Wojciechowski. Web Services

NIEZAWODNE ROZWIĄZANIA SYSTEMÓW AUTOMATYKI. asix. Aktualizacja pakietu asix 4 do wersji 5 lub 6. Pomoc techniczna

Aplikacje WWW - laboratorium

Laboratorium 6 Tworzenie bloga w Zend Framework

Nexto.API. Przykładowy klient Java 1.6 do systemu zamówień NextoAPI. Przygotował Rafał Ozga e-kiosk S.A. Maj 2015,

Programowanie obiektowe

Wspomaganie pracy w terenie za pomocą technologii BlackBerry MDS. (c) 2008 Grupa SPOT SJ

13. Konfiguracja proxy http, smtp, pop3, ftp, ssl

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Tomasz Greszata - Koszalin

ESDI. WebService. Wersja 1.2. Strona 1

Kurs Wizualizacja z WinCC SCADA - Zaawansowany. Spis treści. Dzień 1. I VBS w WinCC podstawy programowania (zmienne, instrukcje, pętle) (wersja 1410)

DOKUMENTACJA INTERFEJSU API - HTTPS

Co zawiera ten dokument: Ten dokument zawiera informacje o sposobie organizacji danych w systemie Kancelaris.

System komputerowy. Sprzęt. System komputerowy. Oprogramowanie

Personal Home Page PHP: Hypertext Preprocessor

Transkrypt:

Tematy: Oprogramowanie Tworzymy usługę sieciową Tworzymy aplikację kliencką Podsumowanie Tematem tego rozdziału są usługi sieciowe XML, a dokładniej ich implementacja w PHP. Ponieważ PHP jest językiem i środowiskiem do tworzenia aplikacji WWW przeznaczonych do realizacji różnych zadań, również do tworzenia poważnych aplikacji biznesowych, nie może w nim zabraknąć możliwości tworzenia usług sieciowych oraz oprogramowania klienckiego. Czym są usługi sieciowe? Otóż usługi sieciowe XML to komponenty programowe świadczące określone usługi i wykonujące określone zadania przez sieć (najczęściej internet), do wymiany informacji wykorzystujące język XML. Korzystanie z usług sieciowych z założenia przypomina wywoływanie funkcji musimy znać jej nazwę, przyjmowane parametry i typ (rodzaj) wartości zwracanej tyle że odbywa się to za pośrednictwem sieci. Usługi sieciowe z założenia są technologią ponadplatformową. Aby uniknąć problemów związanych z poznawaniem przez programistów nowych protokołów wymiany danych, usługi sieciowe wykorzystują istniejące już wysokopoziomowe protokoły najczęściej jest to HTTP. Zaletą wykorzystania protokołu HTTP jest niewątpliwie jego szeroka znajomość przez twórców oprogramowania oraz to, że dane przesyłane przez HTTP zwykle nie są blokowane przez zapory sieciowe. Usługi sieciowe i korzystające z nich programy (ewentualnie inne usługi, które z nich korzystają) do wymiany danych używają tzw. kopert SOAP (ang. Simple Object Access Protocol prosty protokół dostępu do obiektów) zapisanych w języku HTML. Do opisu usług sieciowych (dostępnego również przez sieć) służy język WSDL (ang. Web Services Description Language język opisu usług sieciowych), również oparty na języku XML. Opis usługi jest dostępny przez sieć i służy programom klienckim do rozpoznania usługi i poprawnego jej wywołania opis taki zawiera nazwy, listę parametrów oraz rodzaj wartości zwracanych przez usługi. Programy klienckie mogą taki opis analizować na bieżąco, ale najczęściej (szczególnie w rozbudowanych środowiskach programistycznych) na podstawie opisu usługi generowane są tzw. stuby, czyli klasy i funkcje umożliwiające bardzo łatwy dostęp do metod usługi sieciowej (wywołanie takiej metody niczym nie różni się od wywołania zwykłej funkcji czy metody danego obiektu). Na koniec, usługa sieciowa może być umieszczona w rejestrze usług spowoduje to możliwość łatwego wyszukania usług realizujących jakieś konkretne zadanie przez program kliencki lub przez twórców oprogramowania. najczęściej realizowane są jako aktywne strony WWW, uruchamiane na popularnych serwerach WWW działających na różnych platformach systemowych. Najpopularniejszymi platformami językowymi i uruchomieniowymi używanymi do realizacji usług sieciowych XML są obecnie J2EE i.net. PHP raczej nie słynie w świecie IT jako platforma dla usług sieciowych, ale nie oznacza to bynajmniej, że usług takich nie da się w PHP implementować. Ponieważ usługi sieciowe XML używają uznanych standardów w wymianie informacji, są wygodne do tworzenia i używania w programach, stanowią duży krok w rozwoju systemów rozproszonych, gdzie określone zadanie może być realizowane przez różne, niemające ze sobą nic wspólnego (szczególnie jeżeli chodzi o stronę software ową) hosty. Rozdział ten przedstawia jeden ze sposobów implementacji usług sieciowych XML i aplikacji klienckich w PHP. Oprogramowanie Istnieje kilka mniej lub bardziej udanych implementacji obsługi protokołu SOAP w PHP. Na potrzeby tego kursu wybrany został NuSOAP pakiet do tworzenia usług sieciowych w PHP i korzystania z nich. Oprogramowanie to jest rozwijane na licencji LGPL i dostępne na stronie http://sourceforge.net/projects/nusoap/. Instalacja NuSOAP jest prosta wystarczy pobrać plik (archiwum ZIP) zawierający aktualną wersję stabilną (w momencie redagowania tego kursu była to wersja 0.7.3) i wypakować jego zawartość do dowolnego folderu w folderze głównym aplikacji, która będzie świadczyć usługi sieciowe lub z nich korzystać, albo jeszcze lepiej 1 / 8

do dowolnego folderu zdefiniowanego za pomocą dyrektywy include_path pliku konfiguracyjnego php.ini. Jak zapewniają autorzy NuSOAP (i co jest zgodne z prawdą), nie są potrzebne żadne dodatki do PHP, aby móc w pełni korzystać z tego pakietu. Tworzymy usługę sieciową Nasza przykładowa usługa sieciowa będzie nosiła nazwę Usługa testowa i będzie zawierała tylko jedną metodę (funkcję), zwracającą aktualną datę serwera. Data będzie zwracana w formacie długim (np. 20 lipca 2010 r.) lub krótkim (np. 2010-07-20) w zależności od tego, czy parametr przekazywany metodzie będzie miał wartość true, czy false. Na początek musimy napisać funkcję, która będzie zwracała datę jak opisano wyżej, ale która nie będzie miała nic wspólnego z usługą sieciową. Funkcja ta może wyglądać np. tak: function podajdlugadate($typ) { // $miesiace to tablica asocjacyjna zdefiniowana wcześniej, //tłumacząca numery miesięcy na ich nazwy global $miesiace; if ($typ == false) { $data = date('y-m-d'); else { $data = date('d')." ".$miesiace[date('m')]." ".date('y')." r."; return $data; W funkcji tej umieszczone zostało odwołanie do zadeklarowanej wcześniej (w tym samym pliku co funkcja, tylko ponad nią czyli globalnie) tablicy asocjacyjnej $miesiace. Tablica ta jest indeksowana numerami miesięcy (w postaci dwucyfrowych liczb traktowanych jako ciąg znaków) i zawiera odpowiadające im nazwy miesięcy. Teraz tę funkcję przerobimy na metodę usługi sieciowej. W tym celu w udostępnianym przez serwer katalogu utworzymy plik o nazwie dateserv.php i wprowadzimy do niego zawartość listingu 11.1. Listing 11.1. Definicja usługi sieciowej <?php // Dołączenie pakietu NuSOAP require_once("soap/lib/nusoap.php"); // Tablica asocjacyjna do konwersji numerów miesięcy na nazwy $miesiace = array('01' => 'stycznia', '02' => 'lutego', '03' => 'marca', 2 / 8

'04' => 'kwietnia', '05' => 'maja', '06' => 'czerwca', '07' => 'lipca', '08' => 'sierpnia', '09' => 'września', '10' => 'października', '11' => 'listopada', '12' => 'grudnia'); // Utworzenie usługi sieciowej (serwera SOAP) $ns = "http://127.0.0.1"; $serwer = new soap_server(); $serwer->configurewsdl('usługa testowa', $ns); $serwer->wsdl->schematargetnamespace = $ns; // Rejestracja metod usługi sieciowej $serwer->register('podajdlugadate', array('typ' => 'xsd:boolean'), array('return' => 'xsd:string'), $ns, false, false, false, 'Zwraca aktualną datę serwera.'); // Definicja metody usługi sieciowej function podajdlugadate($typ) { global $miesiace; if ($typ == false) { $data = date('y-m-d'); else { $data = date('d')." ".$miesiace[date('m')]." ".date('y')." r."; 3 / 8

return new soapval('return', 'xsd:string', $data); $HTTP_RAW_POST_DATA = isset($http_raw_post_data)? $HTTP_RAW_POST_DATA : ''; $serwer->service($http_raw_post_data);?> Występująca na samym początku kodu z listingu 11.1 instrukcja require_once dołącza do naszego skryptu pakiet NuSOAP jest to absolutna konieczność, żeby można było stworzyć usługę sieciową. Oczywiście ścieżka w instrukcji require_once jest zależna od miejsca, w którym umieściliśmy naszą kopię biblioteki NuSOAP. Dalej mamy definicję tablicy asocjacyjnej miesięcy, a następnie linie kodu konieczne do utworzenia usługi sieciowej XML (m.in. podajemy nazwę usługi). Zauważmy, że zanim funkcja podajdlugadate() została zdefiniowana, była rejestrowana jako metoda usługi. Widzimy, że podczas rejestracji metody podajemy jej nazwę, tablicę parametrów (parametry i ich typy podajemy jako pary klucz-wartość), tablicę definiującą typ wartości zwracanej, przestrzeń nazw usługi, szereg mniej ważnych parametrów (choć w niektórych przypadkach użytecznych) i na końcu opis usługi przeznaczony dla użytkownika. Definicja metody podajdlugadate() w zasadzie niczym się nie różni od przedstawionego wcześniej pierwowzoru, oprócz wartości zwracanej. W przypadku metody usługi sieciowej jako wartość zwracaną musimy przekazać obiekt klasy soapval, żeby usługa mogła prawidłowo działać. Na koniec skryptu dwie linie konieczne do uruchomienia usługi. Mając tak sformułowany skrypt, możemy teraz odwołać się do niego z przeglądarki WWW jeżeli nie popełnimy żadnego błędu, efekt powinien być podobny do tego z rysunku 11.1. Rysunek 11.1. Ekran naszej usługi sieciowej Aby uzyskać opis usługi w języku WSDL, musimy w polu adresu przeglądarki wpisać: http://localhost/soap/dateserv.php?wsdl Oczywiście adres URL usługi uzależniony jest od konfiguracji i nazwy serwera, ważne jest, żeby po nazwie pliku dateserv.php podać parametr wsdl (w przypadku NuSOAP nazwa tego parametru pisana jest małymi literami). Rysunek 11.2 przedstawia okno przeglądarki z opisem usługi, natomiast pełny wydruk opisu usługi w języku WSDL znajduje się na listingu 11.2. Rysunek 11.2. Okno przeglądarki z załadowanym opisem usługi sieciowej Listing 11.2 Opis usługi sieciowej w języku WSDL 4 / 8

<?xml version="1.0" encoding="iso-8859-1"?> <definitions xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://127.0.0.1" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetnamespace="http://127.0.0.1"> <types> <xsd:schema targetnamespace="http://127.0.0.1"> <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" /> <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" /> </xsd:schema> </types> <message name="podajdlugadaterequest"> <part name="typ" type="xsd:boolean" /> </message> <message name="podajdlugadateresponse"> <part name="return" type="xsd:string" /> </message> <porttype name="usługa testowaporttype"> <operation name="podajdlugadate"> <documentation>zwraca aktualną datę serwera.</documentation> <input message="tns:podajdlugadaterequest"/> <output message="tns:podajdlugadateresponse"/> </operation> </porttype> <binding name="usługa testowabinding" type="tns:usługa testowaporttype"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="podajdlugadate"> <soap:operation soapaction="http://192.168.20.135/~rafal/dateserv.php/podajdlugadate" 5 / 8

style="rpc"/> <input> <soap:body use="encoded" namespace="http://127.0.0.1" encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="http://127.0.0.1" encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <service name="usługa testowa"> <port name="usługa testowaport" binding="tns:usługa testowabinding"> <soap:address location="http://192.168.20.135/~rafal/dateserv.php"/> </port> </service> </definitions> Jak widać, opis usługi w języku WSDL jest dość trudny do zrozumienia, stąd zastosowanie znajdują różne biblioteki klas lub funkcji, które potrafią rozszyfrować WSDL i umożliwiają nam korzystanie z usług sieciowych. Tworzymy aplikację kliencką Program kliencki dla usługi sieciowej tworzy się podobnie do samej usługi sieciowej. Oprogramowanie NuSOAP przetwarza opis usługi w języku WSDL na bieżąco, ale mimo to programy klienckie działają szybko i wydajnie. Listing 11.3 zawiera kod skryptu klienta usługi sieciowej zdefiniowanej w poprzednim punkcie. Listing 11.3. Klient usługi sieciowej <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/tr/html4/strict.dtd"> <html lang="pl"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>usługa sieciowa</title> 6 / 8

</head> <body> <div> <?php // Dołączenie pakietu NuSOAP require_once('soap/lib/nusoap.php'); // Adres opisu usługi, z której będziemy korzystać $wsdl_url = 'http://localhost/soap/dateserv.php?wsdl'; // Utworzenie obiektu klienta SOAP $klient = new nusoap_client($wsdl_url, 'wsdl'); // W zależności od wartości parametru "typ" przekazanego przez URL // wyświetlana jest data długa, data krótka lub komunikat o błędzie if (isset($_get['typ'])) { // Wywołanie metody "podajdlugadate" usługi sieciowej print($klient->call('podajdlugadate', array('typ' => $_GET['typ']))); else {?> print("podaj parametr: true lub false"); </div> </body> </html> Na początku skryptu z listingu 11.3 dołączany jest pakiet NuSOAP, podobnie jak to miało miejsce w skrypcie definiującym usługę sieciową. Dalej tworzony jest obiekt $klient klasy soapclient (w przypadku usługi sieciowej tworzyliśmy obiekt klasy soap_server) w oparciu o opis usługi WSDL. Skrypt z listingu 11.3 działa w taki sposób, że pobiera parametr typ przekazany przez URL i przekazuje jego wartość metodzie usługi sieciowej. Zwróćmy uwagę na wywołanie metody podajdlugadate(): $klient->call('podajdlugadate', array('typ' => $_GET['typ'])) Metoda podajdlugadate() nie jest niestety dostępna wprost trzeba ją wywołać, wykonując metodę call na 7 / 8

obiekcie klasy soapclient. Pierwszym parametrem tej metody jest nazwa metody usługi sieciowej, drugim tablica parametrów wywołania metody usługi sieciowej. Tablica ta gromadzi parametry i ich wartości jako pary klucz-wartość (jest to tablica asocjacyjna). Wynik zwracany przez metodę podajdlugadate() jest typu string, dlatego też wyświetlenie tego wyniku da efekt podobny do tego z rysunku 11.3 (pod warunkiem że wszystko poszło dobrze). Rysunek 11.3. Efekt wykonania kodu klienta usługi sieciowej Stosując ogólny schemat korzystania z usług sieciowych, będziemy w stanie połączyć się i pobrać dane z większości dostępnych w Internecie usług sieciowych XML. Jedynie w przypadku usług uruchamianych na platformie.net musimy zwracać szczególną uwagę na tablicę parametrów wywołania metody usługi sieciowej w tym przypadku należy zastosować tablicę zagnieżdżoną. Podsumowanie W tym rozdziale zaledwie zaczęliśmy tematykę usług sieciowych. Tak potężne narzędzie, jakim są właśnie usługi sieciowe XML, wszystkie swoje zalety objawia dopiero w sytuacji, gdy dla osiągnięcia założonego celu gromadzone są w oprogramowaniu klienckim dane pochodzące z wielu usług sieciowych, uruchomionych na różnych hostach w sieci, na różnych platformach systemowych i sprzętowych. zwalniają programistę z tworzenia oprogramowania sieciowego z wykorzystaniem niskopoziomowego API operującego niejednokrotnie na gniazdkach i pakietach. W Internecie można znaleźć wiele rejestrów usług sieciowych. Jednym z ciekawszych jest WebserviceX.NET dostępny pod adresem http://www.webservicex.net/. Można w nim znaleźć wiele ciekawych usług. Jeśli chodzi o sam pakiet NuSOAP, bardzo ciekawy podręcznik, którego autorem jest Scott Nichol, dostępny jest pod adresem http://www.scottnichol.com/soap.htm. Warto też zainteresować się ciągle rozwijanym zestawem funkcji SOAP zintegrowanym z PHP (od wersji 5.0): http://www.php.net/manual/pl/ref.soap.php. Dodatkowo obsługę SOAP przygotowano również w ramach projektu PEAR (http://pear.php.net/). 8 / 8