Tytuł oryginału: PHP Web Services · 4 _Spis tre

24

Transcript of Tytuł oryginału: PHP Web Services · 4 _Spis tre

Page 1: Tytuł oryginału: PHP Web Services · 4 _Spis tre
Page 2: Tytuł oryginału: PHP Web Services · 4 _Spis tre

Tytuł oryginału: PHP Web Services

Tłumaczenie: Łukasz Piwko (wstęp, rozdz. 2 – 13, dodatki), Paweł Halladin (rozdz. 1)

ISBN: 978-83-283-0551-9

© Helion 2015

Authorized Polish translation of the English edition of PHP Web Services, ISBN 9781449356569 © 2013 Lorna Jane Mitchell

This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani zaich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.

Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (księgarnia internetowa, katalog książek)

Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/apinow.zip

Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/apinowMożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Printed in Poland.

• Kup książkę• Poleć książkę • Oceń książkę

• Księgarnia internetowa• Lubię to! » Nasza społeczność

Page 3: Tytuł oryginału: PHP Web Services · 4 _Spis tre

3

Spis tre ci

Wst p ............................................................................................... 7

1. HTTP ................................................................................................ 11Klient i serwer 13Wysy anie da HTTP 14

Curl 15Narz dzia przegl darki internetowej 18PHP 19

2. Czasowniki protoko u HTTP .......................................................... 23Wysy anie da GET 23Wysy anie da POST 25Inne czasowniki HTTP 28

3. Nag ówki ........................................................................................ 31Nag ówki da i odpowiedzi 32Najcz ciej u ywane nag ówki HTTP 32

Nag ówek User-Agent 33Nag ówki do negocjacji tre ci 34Zabezpieczanie da za pomoc nag ówka Authorization 38

Nag ówki niestandardowe 40

4. Dane cookie ...................................................................................43Zasada dzia ania ciasteczek 43Praca z ciasteczkami w PHP 46

5. Format JSON ..................................................................................49Kiedy u ywa formatu JSON 50Praca z formatem JSON z poziomu PHP 51Format JSON w istniej cych interfejsach API 52

6. Format XML ................................................................................... 57Kiedy u ywa formatu XML 59XML w PHP 59XML w istniej cych interfejsach API 60

Kup książkę Poleć książkę

Page 4: Tytuł oryginału: PHP Web Services · 4 _Spis tre

4 Spis tre ci

7. Us ugi RPC i SOAP ..........................................................................63Us ugi RPC 63Us ugi SOAP 65

J zyk WSDL 67Klient SOAP w j zyku PHP 67Serwer SOAP w j zyku PHP 68Generowanie pliku WSDL z poziomu j zyka PHP 69Klient i serwer PHP z WSDL 71

8. REST ................................................................................................73Adresy URL w us ugach typu RESTful 74Struktura zasobów i hipermedia 74Typy danych i mediów 78Elementy HTTP w REST 79

Tworzenie zasobów 79Odczytywanie rekordów 80Aktualizowanie rekordów 81Usuwanie rekordów 82

Dodatkowe nag ówki w us ugach typu RESTful 82Nag ówki autoryzacyjne 82Nag ówki buforowania 84

Technologia RESTful a przydatno 85

9. Diagnozowanie usterek w us ugach sieciowych .........................87Diagnozowanie danych wyj ciowych 88Dzienniki 88Diagnozowanie spoza aplikacji 90

Wireshark 91Charles 94

Znajd odpowiednie narz dzie 97

10. Projektowanie us ug ......................................................................99Wybór typu us ugi 100Wybór formatów danych 101Opcje konfiguracyjne 102Ustawienia domy lne 103

Kup książkę Poleć książkę

Page 5: Tytuł oryginału: PHP Web Services · 4 _Spis tre

Spis tre ci 5

11. Tworzenie niezawodnych us ug ................................................. 105Najwa niejsza jest jednolito 105

Spójno i znaczenie nazw 106Zasady weryfikacji danych 106Przewidywalno struktur 107

Solidno 108

12. Obs uga b dów w interfejsach API ........................................... 109Format wyj ciowy 109Konstruktywne powiadomienia o b dach 112Co robi , gdy napotka si b d 114

13. Dokumentacja ............................................................................... 115Dokumentacja ogólna 115Dokumentacja API 116Dokumentacja interaktywna 117Samouczki i szerszy ekosystem 119

A Przewodnik po najcz ciej u ywanych kodach statusu.............. 121

B Najcz ciej u ywane nag ówki HTTP ......................................... 123

Skorowidz .................................................................................... 125

Kup książkę Poleć książkę

Page 6: Tytuł oryginału: PHP Web Services · 4 _Spis tre

6 Spis tre ci

Kup książkę Poleć książkę

Page 7: Tytuł oryginału: PHP Web Services · 4 _Spis tre

31

ROZDZIA 3.

Nag ówki

W poprzednich rozdzia ach przedstawi am ró ne prezentacje formatu HTTPi wyja ni am, e w daniach i odpowiedziach sieciowych jest przesy anychznacznie wi cej informacji ni to, co znajduje si w ich tre ci g ównej.Oczywi cie, tre jest najwa niejsza i zazwyczaj istotna dla u ytkownika, alenag ówki równie przenosz kluczowe informacje, dzi ki którym mo liwajest efektywna komunikacja mi dzy klientem i serwerem. Gdyby porównatre dania do listu zawieraj cego gotówk , to nag ówki by yby adresem,znaczkiem i np. instrukcj „Otworzy dnia…” (rysunek 3.1).

Rysunek 3.1. Koperta ze znaczkiem, adresem i stemplem pocztowym

Te dodatkowe informacje sprawiaj , e tre dotrze w odpowiednie miejsce,oraz stanowi dla adresata instrukcj , jak nale y si z nimi obchodzi .

Kup książkę Poleć książkę

Page 8: Tytuł oryginału: PHP Web Services · 4 _Spis tre

32 Rozdzia 3. Nag ówki

Nag ówki da i odpowiedziWiele nag ówków HTTP mo e wyst powa zarówno w daniach, jak i od-powiedziach. Ale niektóre s przydatne tylko albo w jednych, albo w drugich.Poni ej znajduj si przyk ady prawdziwych nag ówków da i odpo-wiedzi z mojej strony internetowej (http://www.lornajane.net/) i przegl darkiChrome.

Nag ówki da :GET / HTTP/1.1Host: www.lornajane.netConnection: keep-aliveAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.19 (KHTML, like Gecko)Chrome/25.0.1323.1 Safari/537.19Accept-Encoding: gzip,deflate,sdchAccept-Language: en-GB,en-US;q=0.8,en;q=0.6Accept-Charset: ISO-8859-1,utf-8;q=0.7,+;q=0.3

Nag ówki odpowiedzi:HTTP/1.1 200 OKServer: Apache/2.2.14 (Ubuntu)X-Powered-By: PHP/5.3.2-1ubuntu4.11X-Pingback: http://www.lornajane.net/xmlrpc.phpLast-Modified: Thu, 06 Dec 2012 14:46:05 GMTCache-Control: no-cache, must-revalidate, max-age=0Content-Type: text/html; charset=UTF-8Content-Length: 25279Date: Thu, 06 Dec 2012 14:46:05 GMTX-Varnish: 2051611642Age: 0Via: 1.1 varnishConnection: keep-alive

W odpowiedzi znajduje si nag ówek Content-Type, który by by obecny tak ew daniu, gdyby by o ono typu POST. Takie wielozadaniowe nag ówkinazywaj si nag ówkami jednostek (ang. entity header) i dotycz tre ciprzesy anej w daniu lub odpowiedzi HTTP. Do nag ówków wysy anychtylko w daniach zaliczaj si User-Agent, Accept, Authorization i Cookie.Natomiast nag ówek Set-Cookie jest w a ciwy tylko odpowiedziom.

Najcz ciej u ywane nag ówki HTTPW poprzednich przyk adach przedstawi am par najcz ciej u ywanych na-g ówków HTTP. Teraz w kolejnych kilku podrozdzia ach przyjrzymy si

Kup książkę Poleć książkę

Page 9: Tytuł oryginału: PHP Web Services · 4 _Spis tre

Najcz ciej u ywane nag ówki HTTP 33

tym nag ówkom, które najcz ciej spotyka si podczas pracy z ró nymiinterfejsami API. Poka Ci, jak wysy a i odbiera ró ne typy nag ówkówz poziomu PHP, aby je poprawnie obs ugiwa we w asnych aplikacjach.

Nag ówek User-AgentNag ówek User-Agent przekazuje informacje o kliencie, który wys a danieHTTP. Najcz ciej jest to klient programowy. Spójrz na poni szy nag ówek:

User-Agent Mozilla/5.0 (Linux; U; Android 2.3.4; en-gb; SonyEricssonSK17iBuild/4.0.2.A.0.62) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 MobileSafari/533.1

Jak s dzisz, z jakiego urz dzenia wys ano to danie? Pewnie my lisz, e wy-s a am je z telefonu Sony Ericsson z Androidem… i jest to ca kiem mo liwe.Ale równie dobrze kto móg u y poni szego polecenia Curl:

curl -H "User-Agent: Mozilla/5.0 (Linux; U; Android 2.3.4; en-gb;SonyEricssonSK17i Build/4.0.2.A.0.62) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 Mobile Safari/533.1" http://requestb.in/przyklad

Nie da si z ca pewno ci stwierdzi , czy takie danie jak powy sze rze-czywi cie pochodzi z telefonu z Androidem czy raczej tylko z czego , co sipod taki telefon podszywa. Na podstawie tych informacji mo na wys aodpowied — w sumie, je li kto chce udawa ma y telefon z systememAndroid, to nale y mu odpowiedzie tre ci przeznaczon dla takiegourz dzenia. Ale trzeba te sobie u wiadomi , e nag ówek User-Agent niemo e by u ywany do adnych wa nych spraw, np. definiowania w asnegonag ówka w celu uwierzytelnienia u ytkownika. Jak wszystkie dane z ze-wn trz, nag ówek ten mo e zosta zmanipulowany i nale y traktowa gopodejrzliwie.

W PHP mo na zarówno przetwarza , jak i wysy a nag ówek User-Agent. Otoprzyk ad wys ania go przy u yciu strumieni:

<?php

$url = 'http://localhost/book/user-agent.php';$options = array( "http" => array( "header" => "User-Agent: zaawansowany magiczny klient HTTP" ));

$page = file_get_contents($url, false , stream_context_create($options));echo $page;

Kup książkę Poleć książkę

Page 10: Tytuł oryginału: PHP Web Services · 4 _Spis tre

34 Rozdzia 3. Nag ówki

W podobny sposób w daniu mo na ustawi dowolne nag ówki. Analo-gicznie te mo na je odebra , stosuj c takie samo podej cie. Wszystkiepotrzebne dane znajduj si w tablicy $_SERVER. A w przedstawionymprzyk adzie zawarto nag ówka User-Agent mo na sprawdzi w elemencie$_SERVER["HTTP_USER_AGENT"].

Oto prosty przyk ad:<?php

echo "To danie zosta o wys ane przez: " . filter_var($_SERVER['HTTP_USER_AGENT'], FILTER_SANITIZE_STRING);

W pracy z urz dzeniami przeno nymi cz sto u ywa si takich nag ówkówjak User-Agent w po czeniu z bibliotek WURFL (http://wurfl.sourceforge.net/)w celu wykrywania mo liwo ci sprz tu i odpowiedniego dostosowywaniadla niego tre ci. Natomiast w przypadku interfejsów API lepiej jest oczekiwa ,e klienty u yj ró nych nag ówków, daj c odpowiednich dla siebie ty-

pów tre ci, zamiast decydowa o tym w sposób centralny.

Nag ówki do negocjacji tre ciNag ówek Content-Type s u y do okre lania formatu danych przesy anychw tre ci dania. Dzi ki temu odbiorca wie, jak rozszyfrowa otrzymane in-formacje. Pokrewny nag ówek Accept s u y do okre lania przez klienta, jakirodzaj tre ci jest dopuszczalny. Innymi s owy, za pomoc tego nag ówkaklient mo e poinformowa serwer, jak tre jest w stanie obs u y . Poni ejznajduje si pokazywany ju wcze niej przyk adowy nag ówek Accept za-zwyczaj wysy any przez przegl dark Google Chrome:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Przy odczytywaniu nag ówka Accept ka d z warto ci oddzielonych prze-cinkami nale y traktowa jako osobn jednostk . W powy szym nag ówkuklient poda nast puj ce preferencje dotycz ce typów tre ci:

text/html,

application/xhtml+xml,

application/xml,

*/*.

Je li dostarczone dane b d w jednym z tych formatów, to nasz klient je roz-pozna. Ale dwa ostatnie elementy zawieraj dodatkowe informacje: war-to q. Okre la ona, jak bardzo po dany jest dany rodzaj tre ci. Wartodomy lna w tym przypadku to q=1.

Kup książkę Poleć książkę

Page 11: Tytuł oryginału: PHP Web Services · 4 _Spis tre

Najcz ciej u ywane nag ówki HTTP 35

Ostatni punkt zawiera typ tre ci */*. Gwiazdki to symbole wieloznaczne,co oznacza, e przegl darka Chrome rzekomo potrafi obs u y ka dy rodzajtre ci — wydaje si to ma o prawdopodobne. Je li kto wymy li w asny for-mat rozpoznawany tylko przez jego klienta i serwer, to przegl darka Chromesobie z nim nie poradzi, wi c zapis */* jest myl cy.

U ycie nag ówków Content i Content-Type do informowania o tym, jakiego ro-dzaju tre rozpoznaje klient i co w rzeczywisto ci zosta o wys ane, nazywa sinegocjowaniem tre ci. Dzi ki temu, e negocjacje formatów s prowadzoneza po rednictwem nag ówków, metadane nie mieszaj si z rzeczywistymiinformacjami, co mia oby miejsce, gdyby oba rodzaje parametrów by y prze-sy ane w tre ci g ównej lub adresie URL dania. Ogólnie rzecz bior c, na-g ówki s dobrym rozwi zaniem.

Negocjowa mo na nie tylko tre . W jednym z wcze niejszych przyk adówznajduj si nast puj ce nag ówki:

Accept-Encoding: gzip,deflate,sdchAccept-Language: en-GB,en-US;q=0.8,en;q=0.6Accept-Charset: ISO-8859-1,utf-8;q=0.7,+;q=0.3

Ilustruj one inne rodzaje negocjacji, np. dotycz ce kodowania obs ugiwa-nego przez klienta, preferowanych j zyków oraz zestawów znaków. Na pod-stawie tych informacji mo na odpowiednio sformatowa odpowied , abyby a optymalna dla danego rodzaju urz dze .

Przetwarzanie nag ówka AcceptZobaczmy, jak poprawnie powinno si przetwarza nag ówek Accept. Ka dytaki nag ówek zawiera list oddzielonych przecinkami warto ci; niektórez nich zawieraj dodatkowo parametr q, okre laj cy priorytetowo . Braktego parametru odczytuje si tak, jakby by ustawiony na 1. Wró my doprzyk adu nag ówka Accept z mojej przegl darki. Mo na go rozbi na po-szczególne cz ci, sprawdzi ich priorytet, a nast pnie odpowiednio posorto-wa . Poni ej znajduje si przyk adowa funkcja zwracaj ca tablic obs ugi-wanych formatów w kolejno ci od najbardziej po danego:

<?php

function parseAcceptHeader() { $hdr = $_SERVER['HTTP_ACCEPT' ]; $accept = array(); foreach (preg_split('/\s*,\s*/' , $hdr) as $i => $term) { $o = new \stdclass; $o->pos = $i; if (preg_match(",^(\S+)\s*;\s*(?:q|level)=([0-9\.]+),i" , $term, $M)) { $o->type = $M[1];

Kup książkę Poleć książkę

Page 12: Tytuł oryginału: PHP Web Services · 4 _Spis tre

36 Rozdzia 3. Nag ówki

$o->q = (double)$M[2]; } else { $o->type = $term; $o->q = 1; } $accept[] = $o; } usort($accept, function ($a, $b) { /* pierwsza warstwa: wygrywa najwy sza warto wspó czynnika q */ $diff = $b->q - $a->q; if ($diff > 0) { $diff = 1; } else if ($diff < 0) { $diff = - 1; } else { /* je li wyst pi remis, wygrywa pierwszy na li cie */ $diff = $a->pos - $b->pos; } return $diff; }); $accept_data = array(); foreach ($accept as $a) { $accept_data[$a->type] = $a->type; } return $accept_data;}

Przegl darki mog wysy a ró ne nag ówki i wynik ich analizy zapomoc powy szego kodu mo e by inny ni przedstawiony tutaj.

Dla nag ówka Accept wys anego przez moj przegl dark otrzyma am na-st puj cy wynik:

array(4) { ["text/html" ] => string(9) "text/html" ["application/xhtml+xml" ] => string(21) "application/xhtml+xml" ["application/xml" ] => string(15) "application/xml" ["*/*" ] => string(3) "*/*"}

Na podstawie tych informacji mo na wywnioskowa , w jakim formacie najle-piej odes a dane. Poni ej znajduje si prosty przyk adowy skrypt wywo uj -cy funkcj parseAcceptHeader(), przegl daj cy formaty w celu sprawdzenia,które potrafi obs u y , i wysy aj cy informacje w odpowiedniej formie:

Kup książkę Poleć książkę

Page 13: Tytuł oryginału: PHP Web Services · 4 _Spis tre

Najcz ciej u ywane nag ówki HTTP 37

<?php

$data = array ("greeting" => "Cze , " , "name" => "Lorna" );

$accepted_formats = parseAcceptHeader();$supported_formats = array("application/json" , "text/html" );foreach($accepted_formats as $format) { if(in_array($format, $supported_formats)) { // u ycie tego formatu break; }}

switch($format) { case "application/json" : header("Content-Type: application/json" ); $output = json_encode($data); break; case "text/html" : default: $output = "<p>" . implode(',' , $data) . "</p>" ; break; }

echo $output;

Nag ówek Accept mo na przetwarza na bardzo wiele sposobów (i wszystkiete techniki mo na te stosowa do przetwarzania nag ówków Accept-Language,Accept-Encoding oraz Accept-Charset), ale bardzo wa ne jest, by robi to po-prawnie. Jak du e znaczenie ma analiza nag ówka Accept, mo na przeczytawe wpisie The Accept Header (Nag ówek Accept) na blogu Chrisa Shifletta,pod adresem http://shiflett.org/blog/2011/may/the-accept-header. Funkcja par-seAcceptHeader() zosta a napisana g ównie na podstawie komentarzy znaj-duj cych si pod tym wpisem. Mo esz u y tej funkcji, biblioteki PHP ty-pu mimeparse (https://github.com/ramsey/mimeparse), w asnego rozwi zanialub narz dzia dost pnego w systemie szkieletowym. Najwa niejsze jest to,aby nag ówek by przetwarzany poprawnie, a nie np. przy u yciu funkcjido porównywania a cuchów.

Demonstracja nag ówków Accept przy u yciu CurlPoni ej znajduje si kilka przyk adów wywo ania za pomoc polecenia Curltego samego adresu URL, ale przy u yciu ró nych nag ówków Accept, abyotrzyma ró ne odpowiedzi:

curl http://localhost/book/hello.phpCze , Lorna

curl -H "Accept: application/json" http://localhost/book/hello.php

Kup książkę Poleć książkę

Page 14: Tytuł oryginału: PHP Web Services · 4 _Spis tre

38 Rozdzia 3. Nag ówki

{"greeting":"Cze , ","name":"Lorna"}

curl -H "Accept: text/html;q=0.5,application/json"http://localhost/book/hello.php{"greeting":"Cze , ","name":"Lorna"}

Je li chcesz wys a te dania z poziomu PHP, to mo esz ustawi odpowied-nie nag ówki przy tworzeniu dania. Poni ej znajduje si przyk ad napi-sany przy u yciu rozszerzenia PHP curl, wysy aj cy takie same dania jakpoprzednio:

<?php

$url = "http://localhost/book/hello.php";

$ch = curl_init($url);curl_setopt($ch, CURLOPT_HEADER, array( "Accept: text/html;q=0.5,application/json" ,));curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$response = curl_exec($ch);echo $response;curl_close($ch);

Liczba obs ugiwanych nag ówków zale y od konkretnej aplikacji. Dobrympomys em jest oferowanie ró nych typów tre ci, takich jak JSON i XML,a nawet czystego tekstu. Wszystko zale y od rodzaju programu i potrzebjego u ytkowników. Ale je li zdecydujesz si wprowadzi obs ug ró nychtypów tre ci, to wiesz ju , jak to najlepiej zrobi .

Zabezpieczanie daza pomoc nag ówka AuthorizationNag ówki mog dostarcza informacje pozwalaj ce na zidentyfikowanie u yt-kownika. Oddzielenie ich od danych aplikacji wszystko upraszcza i cz stosprawia, e aplikacja jest bezpieczniejsza. Je li chodzi o bezpiecze stwou ytkowników interfejsów API, to do us ug sieciowych maj zastosowaniewszystkie techniki stosowane przy zabezpieczaniu serwisów internetowych.Nie trzeba wymy la niczego nowego, cho nieraz widzia am, jak ktowynajdywa ko o na nowo, zamiast u ywa ju gotowych standardów.

Podstawowe uwierzytelnianie HTTPJednym z najprostszych sposobów na zabezpieczenie strony internetowejjest u ycie podstawowego uwierzytelniania HTTP. Polega ono na przesy-aniu w nag ówku Authorization ka dego dania zaszyfrowanych danych

Kup książkę Poleć książkę

Page 15: Tytuł oryginału: PHP Web Services · 4 _Spis tre

Najcz ciej u ywane nag ówki HTTP 39

po wiadczaj cych u ytkownika. Zasada dzia ania tej techniki jest bardzoprosta: klient otrzymuje nazw u ytkownika i has o i wykonuje nast puj ceczynno ci:

1. czy nazw u ytkownika i has o w a cuch nazwau ytkownika:has o.

2. Koduje wynik w formacie Base64.

3. Wysy a dane w nag ówku, np. Authorization: Basic a cuch w formaciebase64.

4. Jako e tokeny s przesy ane w postaci tekstowej, powinno si u ywaprotoko u HTTPS.

W opisany sposób mo na utworzy nag ówek r cznie albo u y specjal-nych wbudowanych narz dzi. Poni ej znajduje si przyk ad napisany przyu yciu rozszerzenia curl, wysy aj cy do strony danie pod ochron pod-stawowego uwierzytelniania:

<?php

$url = "http://localhost/book/basic-auth.php";

$ch = curl_init($url);curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC ) ;curl_setopt($ch, CURLOPT_USERPWD, "user:pass" );curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$response = curl_exec($ch);echo $response;curl_close($ch);

W j zyku PHP wszystkie potrzebne informacje mo na znale w zmiennejsuperglobalnej $_SERVER. Je li u ywane jest podstawowe uwierzytelnianie,nazw u ytkownika i has o mo na znale odpowiednio w elementach$_SERVER["PHP_AUTH_USER"] i $_SERVER["PHP_AUTH_PASSWORD"]. Je eli kto wy le

danie bez danych po wiadczaj cych lub z niepoprawnymi informacjami,serwer zamiast danej tre ci mo e zwróci kod statusu 401 Unauthorized.

OAuthInn metod zabezpieczania serwisów internetowych, przydatn szcze-gólnie wtedy, gdy jaki zewn trzny odbiorca pobiera dane nale ce dou ytkownika, jest OAuth (http://oauth.net/). OAuth to standardowa techni-ka umo liwiaj ca konsumentowi udost pnienie innemu u ytkownikowiswoich danych, które s przechowywane przez dostawc , z którym u ytkow-nik ten jest w jaki sposób powi zany, bez podawania has a. U ytkownikwchodzi na stron dostawcy w celu weryfikacji swojej to samo ci i przy-dzielenia praw dost pu odbiorcy i mo e cofn te uprawnienia w dowolnym

Kup książkę Poleć książkę

Page 16: Tytuł oryginału: PHP Web Services · 4 _Spis tre

40 Rozdzia 3. Nag ówki

momencie. W metodzie tej dostawca mo e odró ni dania wysy ane przezu ytkownika od da wysy anych przez co lub kogo innego w imieniu te-go u ytkownika.

Szczegó owy opis protoko u OAuth wykracza poza tematyk tej ksi ki(je li chcesz dowiedzie si wi cej na jego temat, mo esz si gn np. po ksi -k Getting Started with OAuth 2.0 wydawnictwa O’Reilly). Wspominam o nim,poniewa wykorzystuje on nag ówek Authorization i jest powszechnieu ywany w ró nych API.

Nag ówki niestandardoweJak prawie ka dy aspekt protoko u HTTP, zestaw dost pnych nag ówkównie jest sta y. Je li kto chce przes a informacje, dla których nie ma odpo-wiedniego nag ówka, to mo e wymy li w asny. Jedynym warunkiem jest,aby nazwy takich niestandardowych nag ówków poprzedzi znakami X-.

Dobrym przyk adem, który cz sto mo na spotka w sieci, jest narz dzieVarnish (https://www.varnish-cache.org/), dodaj ce do odpowiedzi w asne na-g ówki. Zainstalowa am je tak e w swoim serwisie, dzi ki czemu w daniachznajduj nast puj ce informacje:

HTTP/1.1 302 FoundServer: Apache/2.2.14 (Ubuntu)Location: http://www.lornajane.net/Content-Type: text/html; charset=iso-8859-1Content-Length: 288Date: Tue, 11 Dec 2012 15:53:46 GMTX-Varnish: 119643096 119643059Age: 5Via: 1.1 varnishConnection: keep-alive

Ten dodatkowy nag ówek X-Varnish stanowi dowód, e danie zosta o ob-s u one przez narz dzie Varnish. Nie jest to oficjalny nag ówek i dlategoprzed jego nazw znajduj si znaki X-. W interfejsach API dost pnych w siecimo na znale wiele ró nych nag ówków tego typu. Innym doskona ymprzyk adem jest serwis GitHub (http://developer.github.com). Oto, jak odpowiedotrzymuj , gdy wy l danie listy repozytoriów zwi zanych z moim kontem(http://api.github.com/users/lornajane/repos):

HTTP/1.1 200 OKServer: nginxDate: Tue, 11 Dec 2012 16:01:00 GMTContent-Type: application/json; charset=utf-8Connection: keep-alive

Kup książkę Poleć książkę

Page 17: Tytuł oryginału: PHP Web Services · 4 _Spis tre

Nag ówki niestandardowe 41

Status: 200 OKX-Content-Type-Options: nosniffCache-Control: public, max-age=60, s-maxage=60X-GitHub-Media-Type: github.betaX-RateLimit-Limit: 60Content-Length: 106586Last-Modified: Sat, 01 Dec 2012 11:23:32 GMTVary: AcceptX-RateLimit-Remaining: 59ETag: "8c0bde8e577f52c7f68de5d7099e041b"

W przyk adzie tym znajduje si kilka niestandardowych nag ówków, alena szczególn uwag zas uguj te zbudowane wg wzoru X-RateLimit-*, któresprawdzaj , czy nie jest wysy anych zbyt wiele da . Przy u yciu takichniestandardowych nag ówków mi dzy klientem i serwerem mo na przes adodatkowe dane, które nie nale do tre ci g ównej. Dzi ki temu adne in-formacje nie mieszaj si ze sob .

Kup książkę Poleć książkę

Page 18: Tytuł oryginału: PHP Web Services · 4 _Spis tre

42 Rozdzia 3. Nag ówki

Kup książkę Poleć książkę

Page 19: Tytuł oryginału: PHP Web Services · 4 _Spis tre

125

Skorowidz

Aadres URL, 24, 74adres URL obrazu, 61aktualizowanie rekordów, 81analizator protoko ów

sieciowych, 91API, 13API typu RESTful, 53, 78autentykacja, 19autoryzacja, 82

Bbezpiecze stwo, 38biblioteka WURFL, 34biblioteki typu mimeparse, 37b dy, 88, 109–114buforowanie, 84

Ccertyfikaty SSL, 95ciasteczka, cookies, 17ciasteczko

data wyga ni cia, 47ledzenie sesji, 47

tworzenie, 46wysy anie, 44zapisywanie w pliku, 44zasada dzia ania, 43

cookie, Patrz ciasteczkoCRUD, create, read, update,

delete, 73czasownik HTTP

DELETE, 28GET, 23POST, 25PUT, 29

Ddane

cookie, 43wyj ciowe, 88

data wyga ni cia ciasteczka, 47

debugowanie, 95diagnozowanie

danych wyj ciowych, 88spoza aplikacji, 90usterek, 87

dodatki dla przegl darek, 18dodawanie kontekstu, 27dokumentacja

API, 116interaktywna, 117ogólna, 115

DOM, 59dost p do atrybutów, 61dziennik b dów serwera, 89dzienniki, 88

Eelement, Patrz znacznik

Fformat

Base64, 83HTML, 101JSON, 16, 49–55, 74XML, 16, 57–62

formatydanych, 45, 101wyj ciowe, 109

formularz, 24, 26funkcja

curl_setopt(), 20error_log(), 89file_get_contents(), 21, 29,

54, 60http_build_query(), 27json_decode(), 52, 54json_encode(), 51, 54parse_str(), 29parseAcceptHeader(), 36print_r(), 88setcookie(), 46stream_context_create(), 27var_dump(), 52, 67, 88

funkcjeprogramu Charles, 96strumieniowe, 25

Ggenerowanie pliku WSDL, 69gists, 52

Hhipermedia, 77HTTP, HyperText Transfer

Protocol, 11

Iidempotencja, 82identyfikator URI, 68identyfikowanie u ytkownika,

38informacje

o b dach, 65o typach danych, 52o daniach, 95z ciasteczek, 44

instrukcja switch-case, 65interfejs API, 52, 60, 99

Jjednolito , 105j zyk

PHP, 7WSDL, 67

JSON, JavaScript ObjectNotation, 49

Kklasa

JsonView, 112Library, 71SoapClient, 68

Kup książkę Poleć książkę

Page 20: Tytuł oryginału: PHP Web Services · 4 _Spis tre

126 Skorowidz

klasaSoapServer, 68WSDLCreator, 69

klient, 13PHP, 71SOAP, 67

klucze API, 83kod

PHP, 13statusu, 121, 122statusu 200, 54statusu 400, 65statusu 401, 39, 83

kontekst, 27kontroler frontowy, 110

Lliczba obs ugiwanych

nag ówków, 38

Mmetoda

asXML(), 58getCountryList(), 66getResponseBody(), 21send(), 21saveXML(), 58

metody komunikacji, 14model MVC, 111MVC, model, view, controller,

111

Nnag ówek

Accept, 32–37, 123Accept-Charset, 35Accept-Encoding, 35Accept-Language, 35Authorization, 32, 38, 123Authorization, 54Content, 35Content-Length, 26, 123Content-Type, 20, 26,

32–35, 123Cookie, 32, 123ETag, 124If-Modified Since, 85, 124If-None-Match, 84, 124Last-Modified, 124Location, 124Set-Cookie, 32, 124User-Agent, 33, 124WWW-Authenticate, 83X-Varnish, 40

nag ówki, 123autoryzacyjne, 82buforowania, 84ciasteczek, 46do negocjacji tre ci, 34jednostek, 32niestandardowe, 40odpowiedzi, 12, 32

da , 12, 32narz dzia przegl darek

internetowych, 18narz dzie

Charles, 94Curl, 15, 20, 25Developer Toolbar, 18FireBug, 18I/O Docs, 119LiveHTTPHeaders, 18ModHeader, 19pecl_http, 21php2wsdl, 69soapUI, 66tcpdump, 92Varnish, 40WinDump, 92Wireshark, 91XMLParser, 60XMLReader, 60XMLWriter, 60

nazwy funkcji, 106negocjowanie tre ci, 35niezawodna us uga, 105notacja

tablicowa, 61w gierska, 106

OOAuth, 39, 83obiekt typu HTTPRequest, 21obs uga

b dów, 109–114ciasteczek, 17dzienników, 90formatów, 35formatu XML, 58formularzy, 26strumieni, 24wyj cia, 112

da HTTP, 14, 22odczytywanie rekordów, 80odpowiedzi HTTP, 11okre lanie poziomu b dów, 90opakowanie, 64opcja

CURLOPT_HTTPHEADER,54

CURLOPT_ POSTFIELDS,54

Follow TCP stream, 93opcje konfiguracyjne, 102opowie ci u ytkowników, 99

Ppara klucz-warto , 16, 46parametr

action, 65format, 63location, 68method, 63q, 35tags, 63

pastebin, 52PHP, 19

generowanie pliku WSDL,69

klient SOAP, 67praca z ciasteczkami, 46praca z formatem JSON, 51praca z formatem XML, 59serwer SOAP, 68

plikcookiejar, 44cookies.txt, 45github_creds.php, 53php.ini, 88

pliki WSDL, 66–71pobieranie danych, 54, 60portal GitHub, 40, 52powiadomienia o b dach, 112procedura obs ugi b dów, 111program, Patrz narz dzieprojektowanie

interfejsu API, 99us ug, 99

protoko y bezstanowe, 43protokó

FTP, 21HTTP, 11HTTPS, 39OAuth, 40, 83SOAP, 66SSL, 21, 95WebDAV, 28

przechwytywanie danych, 92przegl darki internetowe, 18przekierowanie, 13przepisywanie da , 97przesy anie

informacji, 73stanu reprezentacyjnego, 73

przewidywalno struktur, 107

Kup książkę Poleć książkę

Page 21: Tytuł oryginału: PHP Web Services · 4 _Spis tre

Skorowidz 127

Rrekordy

aktualizowanie, 81odczytywanie, 80usuwanie, 82

repozytoriumgist, 53, 74PECL, 21

reprezentacje zasobów, 73REST, REpresentational State

Transfer, 73–85dodatkowe nag ówki, 82elementy HTTP, 79przydatno technologii,

85rodzaje negocjacji, 35rozszerzenie

Edit This Cookie, 19pecl_http, 19, 27, 29PHP Filter, 107SimpleXML, 59, 61

RPC, Remote Procedure Call,63

ruch https, 96

S, samouczki, 119segregowanie b dów, 113serwer, 13

PHP, 71SOAP, 68

SimpleXML, 59, 61spójno , 106SSL, Secure Socket Layer, 95struktura

danych, 107zasobów, 74

strumieSTDERR, 16STDOUT, 16TCP, 93

symbole wieloznaczne, 35ledzenie strumienia TCP, 93

Ttablica

$_COOKIE, 46$_POST, 26$_SERVER, 28, 34

token dost powy, 54tworzenie

ciasteczek, 46kodu klienta, 14

niezawodnych us ug, 105pliku wsdl, 70repozytorium, 53us ug sieciowych, 14zasobów, 79

dania, 24typy

danych, 78mediów, 79us ug, 100

Uudost pnianie

kodu ród owego, 52us ugi, 64

URI, Uniform ResourceIdentifier, 68

us uga, 99JSON-RPC, 65XML-RPC, 64, 65

us uginiezawodne, 105RESTful, 73–85RPC, 63sieciowe, 14SOAP, 65

ustawienia domy lne, 103usterki, 87usuwanie rekordów, 82uwierzytelnianie, 60, 82, 83uwierzytelnianie HTTP, 38u ywanie

API typu RESTful, 78formatu JSON, 50formatu XML, 59nag ówka User-Agent, 33nag ówków Accept, 37rozszerzenia Curl, 25, 28,

38, 39rozszerzenia pecl_http, 27,

29

Wweryfikacja danych, 106WSDL, Web Service

Description Language, 66wybór

formatów danych, 101typu us ugi, 100

wymiana ciasteczek, 44wysy anie da , 14

GET, 23POST, 25

wyszukiwarka Google, 13wywo anie narz dzia Curl, 20

XXMLParser, 60XMLReader, 60XMLWriter, 60

Zzabezpieczanie

serwisów internetowych,39da , 38

zapisywanie b dów, 88zasady

dzia ania ciasteczek, 43weryfikacji danych, 106

zasoby, 74, 79zasób, 100zdalne wywo ywanie

procedur, 63zmienna

$_SERVER, 39$_COOKIE, 46$_POST, 28$_PUT, 29$_SERVER, 29$access_token, 53$url, 29

zmienneglobalne, 24superglobalne, 39

znacznik<img>, 62<item>, 58<list>, 58<photos>, 62do ustawiania ciasteczek,

46ETag, 84

znaki X-, 40

dania HTTP, 11danie

DELETE, 28GET, 19, 23, 60listy repozytoriów, 40POST, 15, 20, 22, 25PUT, 29

Kup książkę Poleć książkę

Page 22: Tytuł oryginału: PHP Web Services · 4 _Spis tre

O autorceLorna Jane Mitchell jest niezale n konsultantk ds. programowania sie-ciowego, specjalizuj c si w j zyku PHP i interfejsach API. Przez ponad10 lat pracy z j zykiem PHP cz sto uczy a si na w asnych b dach i dzi kitemu ma wiele ciekawych rzeczy do opowiedzenia. Ponadto Mitchell jestdo wiadczon trenerk . Prowadzi szkolenia zarówno dla klientów prywatnychz ca ego wiata, jak i ogólnodost pne kursy. Jest te wietn pisark . Opróczrozmaitych publikacji pisze te bloga pod adresem http://lornajane.net.

KolofonZwierz na ok adce ksi ki API nowoczesnej strony WWW. Us ugi sieciowe w PHPto p ochacz halny (Prunella collaris).

Zdj cie pochodzi z encyklopedii Animate Creation J.G. Wooda.

Kup książkę Poleć książkę

asedzielewski
Prostokąt
Page 24: Tytuł oryginału: PHP Web Services · 4 _Spis tre