Web services w PHP Inżynieria e-systemów - technologia Java Miłosz Dybizbański 171091 Małgorzata Gocał 171082 Kinga Knapik 171046.

1 Web services w PHP Inżynieria e-systemów - technologia ...
Author: Grażyna Czech
0 downloads 2 Views

1 Web services w PHP Inżynieria e-systemów - technologia Java Miłosz Dybizbański 171091 Małgorzata Gocał 171082 Kinga Knapik 171046

2 Web services Web services (WS) jest to ogólna nazwa dla technologii dostępu do zdalnych procedur wykorzystująca do komunikacji standardowe techniki przekazywania danych – m.in. HTTP – oraz XML jako źródło danych. WS jest interfejsem umożliwiającym komunikację między aplikacjami, niezależnie od rodzaju platformy, na której pracują, oraz języka użytego do ich tworzenia. 2

3 Warstwy web services WS dzielimy na trzy warstwy: Packaging – jest to warstwa wymiany danych Description – jest to warstwa opisu API web servisu Discovery – jest to warstwa opisu natury web servisu 3

4 Warstwy WS - Packaging Wymiana danych odbywa się poprzez TCP/IP na porcie 80. rozwiązanie ma tę zaletę, że przepuszcza je firewall bez potrzeby dodatkowej konfiguracji. Warstwa packaging korzysta z ustalonych standardów: SOAP XML-RPC REST OAuth SCA 4

5 SOAP Protokół wywoływania zdalnego dostępu do obiektów. Jest standardem organizacji W3C. Składa się z trzech elementów: koperty (ang. envelope), opisującej zawartość komunikatów oraz sposoby ich przetwarzania zestawu zasad kodowania opisujących instancje zdefiniowanych w aplikacji typów danych konwencji dla prezentacji zdalnych wywołań procedur i odpowiedzi 5

6 SOAP – blok wiadomości Głównym elementem jest blok wiadomości – message. Zawiera on następujące elementy: Element opakowania – envelope – identyfikuje on SOAP’a. Zawiera następujące przestrzenie nazw dla envelope i kodowania. Opcjonalnie nagłówek – header. Element ciała SOAP – body – znajdują się w nim wywołania jak i odpowiedzi serwera. Opcjonalny element błędów – fault – dostarczający informacje o błędach, które powstały podczas przetwarzania wiadomości. 6

7 SOAP – przykład szkieletu 7

8 SOAP – envelope Envelope musi zawierać przestrzenie nazw podane w przykładzie poniżej. Header zawiera opis wiadomości SOAP. Jest on opcjonalny, lecz gdy już się pojawi musi on być pierwszym podelementem w elemencie envelope. W przykładzie podany jest atrybut mustUnderstand. Ustawienie go na 1/true oznacza, że parser odpowiedzialny za przetworzenie headera musi rozpoznać ten element, w przeciwnym razie ma zwrócić błąd. 8

9 SOAP – body W elemencie body podawane są rozkazy dla serwisu, a także zwracane są jego odpowiedzi. W przykładzie widzimy, że wywołujemy metodę GetLoginName z parametrem 42. 9

10 SOAP – body Odpowiedź serwera może być następująca: W odpowiedzi dostaliśmy wartość, która jest nazwą loginu dla podanego ID. 10

11 SOAP – fault Element fault zawiera informacje o błędach. Jest on zawsze elementem body i może pojawić się tylko raz w wiadomości. Zawiera następujące elementy: - kod błędu. Dostępne kody błędów to: –VersionMismatch - błąd określający niepoprawną przestrzeń nazw w elemencie envelope –MustUnderstand - jeżeli ustawiliśmy w headerze wartość mustUnderstand na 1, a serwer nie rozpoznał nagłówków, zwracany jest błąd –Client - wiadomość SOAP wysłana od klienta była niepoprawna –Server - wystąpił błąd na serwerze, dlatego wiadomość nie mogła zostać obsłużona - tekst błędu - informacja o tym kto/co spowodowało błąd - szczegóły błędu 11

12 SOAP – implementacje w PHP PHP-SOAP – to rozwijająca się implementacja posiadająca jednak już sporo możliwości i przyjazne API. Przykład zastosowania tej implementacji: [PRZYKŁAD] ;) nuSOAP – udokumentowana, stale rozwijana implementacja [link do dokumentacji dobrej]. Istnieje także lista mailowa, na której można zadawać pytania dotyczące nuSOAP’a [Co to za lista? Gdzie ona jest? www ;) adres, cokolwiek]. 12

13 WSDL Web Services Description Language (WSDL) -

14 XML-RCP Został zaprojektowany jako łatwy w implementacji i bardzo prosty system pakowania danych dla zdalnych procedur. Mimo swej prostoty oferuje kompleksowe wsparcie dla przekazywania złożonych struktur danych. Typy danych jakimi dysponuje XML-RPC to: 32-bitowy integer - znaczniki: lub Boolean - znacznik: Znaki z tablicy ASCII - znacznik: "Podwójnie precyzyjne" liczby zmienno-przecinkowe - znacznik: Data i czas w formacie ISO 8601 (przykład: 19980717T14:08:55) - znacznik: Base64-encoded binary - znacznik: Struktury danych - znacznik: Tablice - znacznik: 14

15 XML-RCP – przykład zapytania Przykład zapytania, jakie wysyłane jest do serwera WS w „czystej” postaci Z tego przykładu widać, że chcemy wywołać metodę getStateName obiektu examples z parametrami typu integer o wartości 41. 15

16 XML-RCP – przykład zapytania Przykład odpowiedzi, jaka wysyłana jest od serwera WS 16

17 XML-RCP – implementacje w PHP IXR – jest to bardzo ułatwiająca pracę implementacja. Została zaprojektowana, aby osoby znające powierzchownie WS mogły bez problemu poradzić sobie z napisaniem serwera jak i klienta WS. Posiada udogodnienia takie jak łatwa konwersja typów PHP do postaci XML-RPC czy też możliwość tworzenia własnych rozszerzeń. phpxmlrpc – zostało napisane przez samych twórców XML-RPC - Useful Inc. Zaletami implementacji są jej duże możliwości. Dostarcza wiele elementów niezbędnych w tworzeniu WS, jednak dla mniej doświadczonych użytkowników może nastręczać problemów na przykład w podawaniu typów zmiennych czy korzystania z dostępnych obiektów. XML-RPC Client/Server (K. Devense) – zestaw funkcji umożliwiające w łatwy sposób stworzenie klienta i serwera XML-RPC. Inne: –eZ xmlrpc –php-RPC 17

18 XML-RCP – przykład implementacji Jest to przykład klasy w oparciu o implementację XML-RPC Client/Server, korzysta ona z bibliotek XML_RCP2 oraz Cashe_Lite z pakietu PEAR.

19 XML-RCP – przykład implementacji Przykład komunikacji z Flickrem: Wynik przykładu: http://farm5.static.flickr.com/4146/4842869683_984e815ecc.jpg http://farm5.static.flickr.com/4108/4843415934_901ba5db50.jpg http://farm5.static.flickr.com/4111/4843400822_542f815732.jpg http://farm5.static.flickr.com/4128/4842735689_14e7090041.jpg http://farm5.static.flickr.com/4109/4843254586_2c5d2030c1.jpg

20 REST Wzorzec architektury oprogramowania opierający się na bezstanowej wymianie informacji w środowisku rozproszonym. Jako nośnik informacji wykorzystuje m.in. formaty XML i JSON. Mówiąc prościej, usługa REST to odpowiednio zapisany ciąg znaków w formie adresu URI [URL??], który następnie przysyłamy do zewnętrznej aplikacji metodą GET, co skutkuje zwrotem żądanych danych. Aby jeszcze bardziej ułatwić korzystanie z protokołu REST można posłużyć się repozytorium PEAR (PHP Extension and Application Repository). W przykładzie przedstawiona jest abstrakcyjna klasa, która wykona połączenie GET i pobierze dane z serwera, a następnie dokona deserializacji do tablicy PHP. 20

21 REST – przykład podstawowej klasy 21

22 REST – przykład podstawowej klasy Powyżej znajduje się krótka klasa dziedzicząca z klasy REST_Parser. Pokazuje ona przykładowe użycie klasy abstrakcyjnej z poprzedniego slajdu. 22

23 REST – test oraz wynik działania przykładu W wyniku użycia powyższego kodu na stronie ukaże się: 23

24 OAuth otwarty protokół pozwalający na bezpieczną autoryzację za pomocą API dla aplikacji desktopowych, mobilnych i internetowych, pozwala na dostęp do informacji użytkownika ze strony A (dostawcy OAuth, np. Twitter czy Facebook) innej stronie B (konsumentowi), nie wymaga podawania pełnych danych uwierzytelniających, standard ten obecnie jest implementowany na coraz większej liczbie stron, jako że pozwala im wystawiać bezpieczniejsze API. 24

25 OAuth – przykład użycia Należy zarejestrować klienta na http://twitter.com/oauth_clients. Podajemy nazwę naszej aplikacji, jej typ oraz adres URL strony, na którą zostanie przekierowany użytkownik po autoryzacji. Twitter generuje klucz Consumer key oraz Consumer secret, a także podaje podstawowe adresy URL API.

26 OAuth – przykład użycia Korzystając z binarnego rozszerzenia Pecl kod do uwierzytelniania użytkownika wygląda tak:

27 OAuth – przykład użycia Po udanym zalogowaniu użytkownik jest przekierowany na adres URL podany jako callback, jego obsługa może wyglądać następująco:

28 Warstwy WS - Description Jest to warstwa opisu API web serwisu 28

29 Warstwy WS - Discovery Jest to warstwa opisu natury web serwisu 29

30 PEAR (PHP Extension and Application Repository) PEAR jest frameworkiem i systemem dystrybucyjnym rozszerzeń języka PHP. rozszerza podstawowe funkcje PHP, przydatny w zaawansowanych systemach używających tego języka, przydatny w tworzeniu web servisów.

31 Pecl Repozytorium rozszerzeń języka PHP. Nazwa jest skrótem od "PHP Extension Community Library". Zawiera darmowe moduły oparte na licencji open source tworzone przez programistów z całego świata. Począwszy od wydania PHP 5 do PECL przeniesionych zostało wiele wcześniejszych modułów oficjalnych, najczęściej tych niestabilnych lub rzadko używanych. Jest siostrzanym systemem PEARa.