Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00325 005687 13106177 na godz. na dobę w sumie
API nowoczesnej strony WWW. Usługi sieciowe w PHP - ebook/pdf
API nowoczesnej strony WWW. Usługi sieciowe w PHP - ebook/pdf
Autor: Liczba stron: 110
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-0554-0 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> xml i xslt - programowanie
Porównaj ceny (książka, ebook (-40%), audiobook).

Twój klucz do doskonałego API!

Za sukcesem i siłą najpopularniejszych serwisów w sieci często stoi decyzja o szerokim udostępnieniu API (ang. Application Programming Interface). Dzięki temu programiści z całego świata mogą tworzyć rozwiązania oparte na istniejących usługach, integrować różne systemy oraz tworzyć rozszerzenia. Sięgnij po tę książkę, naucz się korzystać z udostępnionego API i zbuduj własne.

Poznaj tajniki budowania przyjaznego interfejsu API. Ta książka pomoże Ci zorientować się, jak działa protokół HTTP, jakie metody udostępnia oraz jakie informacje możesz znaleźć w nagłówkach. Po opanowaniu podstaw przejdziesz do najpopularniejszych formatów wymiany informacji pomiędzy systemami — JSON oraz XML. Zaznajomisz się też z usługami SOAP, RPC i REST. Na sam koniec dowiesz się, jak projektować niezawodne usługi oraz obsługiwać błędy. Jeżeli chcesz, żeby Twoje API zainteresowało innych programistów, musisz zadbać o jego dobrą dokumentację. Zdobądź niezbędną wiedzę o PHP!

Zbuduj API zgodne z oczekiwaniami innych programistów!

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

Darmowy fragment publikacji:

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 za ich 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 HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: 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/apinow Moż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ść Spis tre(cid:316)ci Wysy(cid:228)anie (cid:276)(cid:241)da(cid:254) GET Wysy(cid:228)anie (cid:276)(cid:241)da(cid:254) POST Inne czasowniki HTTP Nag(cid:228)ówki (cid:276)(cid:241)da(cid:254) i odpowiedzi Najcz(cid:246)(cid:264)ciej u(cid:276)ywane nag(cid:228)ówki HTTP Klient i serwer Wysy(cid:228)anie (cid:276)(cid:241)da(cid:254) HTTP Curl Narz(cid:246)dzia przegl(cid:241)darki internetowej PHP Wst(cid:253)p ............................................................................................... 7 1. HTTP ................................................................................................11 13 14 15 18 19 2. Czasowniki protoko(cid:293)u HTTP ..........................................................23 23 25 28 3. Nag(cid:293)ówki ........................................................................................ 31 32 32 33 34 38 40 4. Dane cookie ...................................................................................43 43 46 5. Format JSON ..................................................................................49 50 51 52 6. Format XML ................................................................................... 57 59 59 60 Nag(cid:228)ówek User-Agent Nag(cid:228)ówki do negocjacji tre(cid:264)ci Zabezpieczanie (cid:276)(cid:241)da(cid:254) za pomoc(cid:241) nag(cid:228)ówka Authorization Kiedy u(cid:276)ywa(cid:232) formatu JSON Praca z formatem JSON z poziomu PHP Format JSON w istniej(cid:241)cych interfejsach API Nag(cid:228)ówki niestandardowe Zasada dzia(cid:228)ania ciasteczek Praca z ciasteczkami w PHP Kiedy u(cid:276)ywa(cid:232) formatu XML XML w PHP XML w istniej(cid:241)cych interfejsach API 3 Kup książkęPoleć książkę Us(cid:228)ugi RPC Us(cid:228)ugi SOAP J(cid:246)zyk WSDL Klient SOAP w j(cid:246)zyku PHP Serwer SOAP w j(cid:246)zyku PHP Generowanie pliku WSDL z poziomu j(cid:246)zyka PHP Klient i serwer PHP z WSDL Adresy URL w us(cid:228)ugach typu RESTful Struktura zasobów i hipermedia Typy danych i mediów Elementy HTTP w REST Tworzenie zasobów Odczytywanie rekordów Aktualizowanie rekordów Usuwanie rekordów 7. Us(cid:293)ugi RPC i SOAP ..........................................................................63 63 65 67 67 68 69 71 8. REST ................................................................................................73 74 74 78 79 79 80 81 82 82 82 84 85 9. Diagnozowanie usterek w us(cid:293)ugach sieciowych .........................87 88 88 90 91 94 97 10. Projektowanie us(cid:293)ug ......................................................................99 100 101 102 103 Diagnozowanie danych wyj(cid:264)ciowych Dzienniki Diagnozowanie spoza aplikacji Wybór typu us(cid:228)ugi Wybór formatów danych Opcje konfiguracyjne Ustawienia domy(cid:264)lne Dodatkowe nag(cid:228)ówki w us(cid:228)ugach typu RESTful Nag(cid:228)ówki autoryzacyjne Nag(cid:228)ówki buforowania Technologia RESTful a przydatno(cid:264)(cid:232) Wireshark Charles Znajd(cid:274) odpowiednie narz(cid:246)dzie 4 (cid:95) Spis tre(cid:316)ci Kup książkęPoleć książkę Najwa(cid:276)niejsza jest jednolito(cid:264)(cid:232) Spójno(cid:264)(cid:232) i znaczenie nazw Zasady weryfikacji danych Przewidywalno(cid:264)(cid:232) struktur Solidno(cid:264)(cid:232) Format wyj(cid:264)ciowy Konstruktywne powiadomienia o b(cid:228)(cid:246)dach Co robi(cid:232), gdy napotka si(cid:246) b(cid:228)(cid:241)d 11. Tworzenie niezawodnych us(cid:293)ug ................................................. 105 105 106 106 107 108 12. Obs(cid:293)uga b(cid:293)(cid:253)dów w interfejsach API ........................................... 109 109 112 114 13. Dokumentacja ...............................................................................115 115 116 117 119 A Przewodnik po najcz(cid:253)(cid:316)ciej u(cid:348)ywanych kodach statusu..............121 B Najcz(cid:253)(cid:316)ciej u(cid:348)ywane nag(cid:293)ówki HTTP ......................................... 123 Skorowidz .................................................................................... 125 Dokumentacja ogólna Dokumentacja API Dokumentacja interaktywna Samouczki i szerszy ekosystem Spis tre(cid:316)ci (cid:95) 5 Kup książkęPoleć książkę 6 (cid:95) Spis tre(cid:316)ci Kup książkęPoleć książkę ROZDZIA(cid:292) 3. Nag(cid:293)ówki W poprzednich rozdzia(cid:228)ach przedstawi(cid:228)am ró(cid:276)ne prezentacje formatu HTTP i wyja(cid:264)ni(cid:228)am, (cid:276)e w (cid:276)(cid:241)daniach i odpowiedziach sieciowych jest przesy(cid:228)anych znacznie wi(cid:246)cej informacji ni(cid:276) to, co znajduje si(cid:246) w ich tre(cid:264)ci g(cid:228)ównej. Oczywi(cid:264)cie, tre(cid:264)(cid:232) jest najwa(cid:276)niejsza i zazwyczaj istotna dla u(cid:276)ytkownika, ale nag(cid:228)ówki równie(cid:276) przenosz(cid:241) kluczowe informacje, dzi(cid:246)ki którym mo(cid:276)liwa jest efektywna komunikacja mi(cid:246)dzy klientem i serwerem. Gdyby porówna(cid:232) tre(cid:264)(cid:232) (cid:276)(cid:241)dania do listu zawieraj(cid:241)cego gotówk(cid:246), to nag(cid:228)ówki by(cid:228)yby adresem, znaczkiem i np. instrukcj(cid:241) „Otworzy(cid:232) dnia…” (rysunek 3.1). Rysunek 3.1. Koperta ze znaczkiem, adresem i stemplem pocztowym Te dodatkowe informacje sprawiaj(cid:241), (cid:276)e tre(cid:264)(cid:232) dotrze w odpowiednie miejsce, oraz stanowi(cid:241) dla adresata instrukcj(cid:246), jak nale(cid:276)y si(cid:246) z nimi obchodzi(cid:232). 31 Kup książkęPoleć książkę Nag(cid:293)ówki (cid:348)(cid:233)da(cid:295) i odpowiedzi Wiele nag(cid:228)ówków HTTP mo(cid:276)e wyst(cid:246)powa(cid:232) zarówno w (cid:276)(cid:241)daniach, jak i od- powiedziach. Ale niektóre s(cid:241) przydatne tylko albo w jednych, albo w drugich. Poni(cid:276)ej znajduj(cid:241) si(cid:246) przyk(cid:228)ady prawdziwych nag(cid:228)ówków (cid:276)(cid:241)da(cid:254) i odpo- wiedzi z mojej strony internetowej (http://www.lornajane.net/) i przegl(cid:241)darki Chrome. Nag(cid:228)ówki (cid:276)(cid:241)da(cid:254): GET / HTTP/1.1 Host: www.lornajane.net Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.19 (KHTML, like Gecko) Chrome/25.0.1323.1 Safari/537.19 Accept-Encoding: gzip,deflate,sdch Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 Accept-Charset: ISO-8859-1,utf-8;q=0.7,+;q=0.3 Nag(cid:228)ówki odpowiedzi: HTTP/1.1 200 OK Server: Apache/2.2.14 (Ubuntu) X-Powered-By: PHP/5.3.2-1ubuntu4.11 X-Pingback: http://www.lornajane.net/xmlrpc.php Last-Modified: Thu, 06 Dec 2012 14:46:05 GMT Cache-Control: no-cache, must-revalidate, max-age=0 Content-Type: text/html; charset=UTF-8 Content-Length: 25279 Date: Thu, 06 Dec 2012 14:46:05 GMT X-Varnish: 2051611642 Age: 0 Via: 1.1 varnish Connection: keep-alive W odpowiedzi znajduje si(cid:246) nag(cid:228)ówek Content-Type, który by(cid:228)by obecny tak(cid:276)e w (cid:276)(cid:241)daniu, gdyby by(cid:228)o ono typu POST. Takie wielozadaniowe nag(cid:228)ówki nazywaj(cid:241) si(cid:246) nag(cid:228)ówkami jednostek (ang. entity header) i dotycz(cid:241) tre(cid:264)ci przesy(cid:228)anej w (cid:276)(cid:241)daniu lub odpowiedzi HTTP. Do nag(cid:228)ówków wysy(cid:228)anych tylko w (cid:276)(cid:241)daniach zaliczaj(cid:241) si(cid:246) User-Agent, Accept, Authorization i Cookie. Natomiast nag(cid:228)ówek Set-Cookie jest w(cid:228)a(cid:264)ciwy tylko odpowiedziom. Najcz(cid:253)(cid:316)ciej u(cid:348)ywane nag(cid:293)ówki HTTP W poprzednich przyk(cid:228)adach przedstawi(cid:228)am par(cid:246) najcz(cid:246)(cid:264)ciej u(cid:276)ywanych na- g(cid:228)ówków HTTP. Teraz w kolejnych kilku podrozdzia(cid:228)ach przyjrzymy si(cid:246) 32 (cid:95) Rozdzia(cid:293) 3. Nag(cid:293)ówki Kup książkęPoleć książkę tym nag(cid:228)ówkom, które najcz(cid:246)(cid:264)ciej spotyka si(cid:246) podczas pracy z ró(cid:276)nymi interfejsami API. Poka(cid:276)(cid:246) Ci, jak wysy(cid:228)a(cid:232) i odbiera(cid:232) ró(cid:276)ne typy nag(cid:228)ówków z poziomu PHP, aby je poprawnie obs(cid:228)ugiwa(cid:232) we w(cid:228)asnych aplikacjach. Nag(cid:293)ówek User-Agent Nag(cid:228)ówek User-Agent przekazuje informacje o kliencie, który wys(cid:228)a(cid:228) (cid:276)(cid:241)danie HTTP. Najcz(cid:246)(cid:264)ciej jest to klient programowy. Spójrz na poni(cid:276)szy nag(cid:228)ówek: 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 Jak s(cid:241)dzisz, z jakiego urz(cid:241)dzenia wys(cid:228)ano to (cid:276)(cid:241)danie? Pewnie my(cid:264)lisz, (cid:276)e wy- s(cid:228)a(cid:228)am je z telefonu Sony Ericsson z Androidem… i jest to ca(cid:228)kiem mo(cid:276)liwe. Ale równie dobrze kto(cid:264) móg(cid:228) u(cid:276)y(cid:232) poni(cid:276)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(cid:246) z ca(cid:228)(cid:241) pewno(cid:264)ci(cid:241) stwierdzi(cid:232), czy takie (cid:276)(cid:241)danie jak powy(cid:276)sze rze- czywi(cid:264)cie pochodzi z telefonu z Androidem czy raczej tylko z czego(cid:264), co si(cid:246) pod taki telefon podszywa. Na podstawie tych informacji mo(cid:276)na wys(cid:228)a(cid:232) odpowied(cid:274) — w sumie, je(cid:264)li kto(cid:264) chce udawa(cid:232) ma(cid:228)y telefon z systemem Android, to nale(cid:276)y mu odpowiedzie(cid:232) tre(cid:264)ci(cid:241) przeznaczon(cid:241) dla takiego urz(cid:241)dzenia. Ale trzeba te(cid:276) sobie u(cid:264)wiadomi(cid:232), (cid:276)e nag(cid:228)ówek User-Agent nie mo(cid:276)e by(cid:232) u(cid:276)ywany do (cid:276)adnych wa(cid:276)nych spraw, np. definiowania w(cid:228)asnego nag(cid:228)ówka w celu uwierzytelnienia u(cid:276)ytkownika. Jak wszystkie dane z ze- wn(cid:241)trz, nag(cid:228)ówek ten mo(cid:276)e zosta(cid:232) zmanipulowany i nale(cid:276)y traktowa(cid:232) go podejrzliwie. W PHP mo(cid:276)na zarówno przetwarza(cid:232), jak i wysy(cid:228)a(cid:232) nag(cid:228)ówek User-Agent. Oto przyk(cid:228)ad wys(cid:228)ania go przy u(cid:276)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; Najcz(cid:253)(cid:316)ciej u(cid:348)ywane nag(cid:293)ówki HTTP (cid:95) 33 Kup książkęPoleć książkę W podobny sposób w (cid:276)(cid:241)daniu mo(cid:276)na ustawi(cid:232) dowolne nag(cid:228)ówki. Analo- gicznie te(cid:276) mo(cid:276)na je odebra(cid:232), stosuj(cid:241)c takie samo podej(cid:264)cie. Wszystkie potrzebne dane znajduj(cid:241) si(cid:246) w tablicy $_SERVER. A w przedstawionym przyk(cid:228)adzie zawarto(cid:264)(cid:232) nag(cid:228)ówka User-Agent mo(cid:276)na sprawdzi(cid:232) w elemencie $_SERVER[ HTTP_USER_AGENT ]. Oto prosty przyk(cid:228)ad: ?php echo To (cid:285)(cid:200)danie zosta(cid:239)o wys(cid:239)ane przez: . filter_var($_SERVER[ HTTP_USER_AGENT ], FILTER_SANITIZE_STRING); W pracy z urz(cid:241)dzeniami przeno(cid:264)nymi cz(cid:246)sto u(cid:276)ywa si(cid:246) takich nag(cid:228)ówków jak User-Agent w po(cid:228)(cid:241)czeniu z bibliotek(cid:241) WURFL (http://wurfl.sourceforge.net/) w celu wykrywania mo(cid:276)liwo(cid:264)ci sprz(cid:246)tu i odpowiedniego dostosowywania dla niego tre(cid:264)ci. Natomiast w przypadku interfejsów API lepiej jest oczekiwa(cid:232), (cid:276)e klienty u(cid:276)yj(cid:241) ró(cid:276)nych nag(cid:228)ówków, (cid:276)(cid:241)daj(cid:241)c odpowiednich dla siebie ty- pów tre(cid:264)ci, zamiast decydowa(cid:232) o tym w sposób centralny. Nag(cid:293)ówki do negocjacji tre(cid:316)ci Nag(cid:228)ówek Content-Type s(cid:228)u(cid:276)y do okre(cid:264)lania formatu danych przesy(cid:228)anych w tre(cid:264)ci (cid:276)(cid:241)dania. Dzi(cid:246)ki temu odbiorca wie, jak rozszyfrowa(cid:232) otrzymane in- formacje. Pokrewny nag(cid:228)ówek Accept s(cid:228)u(cid:276)y do okre(cid:264)lania przez klienta, jaki rodzaj tre(cid:264)ci jest dopuszczalny. Innymi s(cid:228)owy, za pomoc(cid:241) tego nag(cid:228)ówka klient mo(cid:276)e poinformowa(cid:232) serwer, jak(cid:241) tre(cid:264)(cid:232) jest w stanie obs(cid:228)u(cid:276)y(cid:232). Poni(cid:276)ej znajduje si(cid:246) pokazywany ju(cid:276) wcze(cid:264)niej przyk(cid:228)adowy nag(cid:228)ówek Accept za- zwyczaj wysy(cid:228)any przez przegl(cid:241)dark(cid:246) Google Chrome: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Przy odczytywaniu nag(cid:228)ówka Accept ka(cid:276)d(cid:241) z warto(cid:264)ci oddzielonych prze- cinkami nale(cid:276)y traktowa(cid:232) jako osobn(cid:241) jednostk(cid:246). W powy(cid:276)szym nag(cid:228)ówku klient poda(cid:228) nast(cid:246)puj(cid:241)ce preferencje dotycz(cid:241)ce typów tre(cid:264)ci: (cid:120) text/html, (cid:120) application/xhtml+xml, (cid:120) application/xml, (cid:120) */*. Je(cid:264)li dostarczone dane b(cid:246)d(cid:241) w jednym z tych formatów, to nasz klient je roz- pozna. Ale dwa ostatnie elementy zawieraj(cid:241) dodatkowe informacje: war- to(cid:264)(cid:232) q. Okre(cid:264)la ona, jak bardzo po(cid:276)(cid:241)dany jest dany rodzaj tre(cid:264)ci. Warto(cid:264)(cid:232) domy(cid:264)lna w tym przypadku to q=1. 34 (cid:95) Rozdzia(cid:293) 3. Nag(cid:293)ówki Kup książkęPoleć książkę Ostatni punkt zawiera typ tre(cid:264)ci */*. Gwiazdki to symbole wieloznaczne, co oznacza, (cid:276)e przegl(cid:241)darka Chrome rzekomo potrafi obs(cid:228)u(cid:276)y(cid:232) ka(cid:276)dy rodzaj tre(cid:264)ci — wydaje si(cid:246) to ma(cid:228)o prawdopodobne. Je(cid:264)li kto(cid:264) wymy(cid:264)li w(cid:228)asny for- mat rozpoznawany tylko przez jego klienta i serwer, to przegl(cid:241)darka Chrome sobie z nim nie poradzi, wi(cid:246)c zapis */* jest myl(cid:241)cy. U(cid:276)ycie nag(cid:228)ówków Content i Content-Type do informowania o tym, jakiego ro- dzaju tre(cid:264)(cid:232) rozpoznaje klient i co w rzeczywisto(cid:264)ci zosta(cid:228)o wys(cid:228)ane, nazywa si(cid:246) negocjowaniem tre(cid:264)ci. Dzi(cid:246)ki temu, (cid:276)e negocjacje formatów s(cid:241) prowadzone za po(cid:264)rednictwem nag(cid:228)ówków, metadane nie mieszaj(cid:241) si(cid:246) z rzeczywistymi informacjami, co mia(cid:228)oby miejsce, gdyby oba rodzaje parametrów by(cid:228)y prze- sy(cid:228)ane w tre(cid:264)ci g(cid:228)ównej lub adresie URL (cid:276)(cid:241)dania. Ogólnie rzecz bior(cid:241)c, na- g(cid:228)ówki s(cid:241) dobrym rozwi(cid:241)zaniem. Negocjowa(cid:232) mo(cid:276)na nie tylko tre(cid:264)(cid:232). W jednym z wcze(cid:264)niejszych przyk(cid:228)adów znajduj(cid:241) si(cid:246) nast(cid:246)puj(cid:241)ce nag(cid:228)ówki: Accept-Encoding: gzip,deflate,sdch Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 Accept-Charset: ISO-8859-1,utf-8;q=0.7,+;q=0.3 Ilustruj(cid:241) one inne rodzaje negocjacji, np. dotycz(cid:241)ce kodowania obs(cid:228)ugiwa- nego przez klienta, preferowanych j(cid:246)zyków oraz zestawów znaków. Na pod- stawie tych informacji mo(cid:276)na odpowiednio sformatowa(cid:232) odpowied(cid:274), aby by(cid:228)a optymalna dla danego rodzaju urz(cid:241)dze(cid:254). Przetwarzanie nag(cid:293)ówka Accept Zobaczmy, jak poprawnie powinno si(cid:246) przetwarza(cid:232) nag(cid:228)ówek Accept. Ka(cid:276)dy taki nag(cid:228)ówek zawiera list(cid:246) oddzielonych przecinkami warto(cid:264)ci; niektóre z nich zawieraj(cid:241) dodatkowo parametr q, okre(cid:264)laj(cid:241)cy priorytetowo(cid:264)(cid:232). Brak tego parametru odczytuje si(cid:246) tak, jakby by(cid:228) ustawiony na 1. Wró(cid:232)my do przyk(cid:228)adu nag(cid:228)ówka Accept z mojej przegl(cid:241)darki. Mo(cid:276)na go rozbi(cid:232) na po- szczególne cz(cid:246)(cid:264)ci, sprawdzi(cid:232) ich priorytet, a nast(cid:246)pnie odpowiednio posorto- wa(cid:232). Poni(cid:276)ej znajduje si(cid:246) przyk(cid:228)adowa funkcja zwracaj(cid:241)ca tablic(cid:246) obs(cid:228)ugi- wanych formatów w kolejno(cid:264)ci od najbardziej po(cid:276)(cid:241)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]; Najcz(cid:253)(cid:316)ciej u(cid:348)ywane nag(cid:293)ówki HTTP (cid:95) 35 Kup książkęPoleć książkę $o- q = (double)$M[2]; } else { $o- type = $term; $o- q = 1; } $accept[] = $o; } usort($accept, function ($a, $b) { /* pierwsza warstwa: wygrywa najwy(cid:298)sza warto(cid:286)(cid:252) wspó(cid:225)czynnika q */ $diff = $b- q - $a- q; if ($diff 0) { $diff = 1; } else if ($diff 0) { $diff = - 1; } else { /* je(cid:286)li wyst(cid:261)pi remis, wygrywa pierwszy na li(cid:286)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(cid:241)darki mog(cid:241) wysy(cid:228)a(cid:232) ró(cid:276)ne nag(cid:228)ówki i wynik ich analizy za pomoc(cid:241) powy(cid:276)szego kodu mo(cid:276)e by(cid:232) inny ni(cid:276) przedstawiony tutaj. Dla nag(cid:228)ówka Accept wys(cid:228)anego przez moj(cid:241) przegl(cid:241)dark(cid:246) otrzyma(cid:228)am na- st(cid:246)puj(cid:241)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(cid:276)na wywnioskowa(cid:232), w jakim formacie najle- piej odes(cid:228)a(cid:232) dane. Poni(cid:276)ej znajduje si(cid:246) prosty przyk(cid:228)adowy skrypt wywo(cid:228)uj(cid:241)- cy funkcj(cid:246) parseAcceptHeader(), przegl(cid:241)daj(cid:241)cy formaty w celu sprawdzenia, które potrafi obs(cid:228)u(cid:276)y(cid:232), i wysy(cid:228)aj(cid:241)cy informacje w odpowiedniej formie: 36 (cid:95) Rozdzia(cid:293) 3. Nag(cid:293)ówki Kup książkęPoleć książkę ?php $data = array ( greeting = Cze(cid:258)(cid:202), , name = Lorna ); $accepted_formats = parseAcceptHeader(); $supported_formats = array( application/json , text/html ); foreach($accepted_formats as $format) { if(in_array($format, $supported_formats)) { // u(cid:298)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(cid:228)ówek Accept mo(cid:276)na przetwarza(cid:232) na bardzo wiele sposobów (i wszystkie te techniki mo(cid:276)na te(cid:276) stosowa(cid:232) do przetwarzania nag(cid:228)ówków Accept-Language, Accept-Encoding oraz Accept-Charset), ale bardzo wa(cid:276)ne jest, by robi(cid:232) to po- prawnie. Jak du(cid:276)e znaczenie ma analiza nag(cid:228)ówka Accept, mo(cid:276)na przeczyta(cid:232) we wpisie The Accept Header (Nag(cid:228)ówek Accept) na blogu Chrisa Shifletta, pod adresem http://shiflett.org/blog/2011/may/the-accept-header. Funkcja par- seAcceptHeader() zosta(cid:228)a napisana g(cid:228)ównie na podstawie komentarzy znaj- duj(cid:241)cych si(cid:246) pod tym wpisem. Mo(cid:276)esz u(cid:276)y(cid:232) tej funkcji, biblioteki PHP ty- pu mimeparse (https://github.com/ramsey/mimeparse), w(cid:228)asnego rozwi(cid:241)zania lub narz(cid:246)dzia dost(cid:246)pnego w systemie szkieletowym. Najwa(cid:276)niejsze jest to, aby nag(cid:228)ówek by(cid:228) przetwarzany poprawnie, a nie np. przy u(cid:276)yciu funkcji do porównywania (cid:228)a(cid:254)cuchów. Demonstracja nag(cid:293)ówków Accept przy u(cid:348)yciu Curl Poni(cid:276)ej znajduje si(cid:246) kilka przyk(cid:228)adów wywo(cid:228)ania za pomoc(cid:241) polecenia Curl tego samego adresu URL, ale przy u(cid:276)yciu ró(cid:276)nych nag(cid:228)ówków Accept, aby otrzyma(cid:232) ró(cid:276)ne odpowiedzi: curl http://localhost/book/hello.php Cze(cid:258)(cid:202), Lorna curl -H Accept: application/json http://localhost/book/hello.php Najcz(cid:253)(cid:316)ciej u(cid:348)ywane nag(cid:293)ówki HTTP (cid:95) 37 Kup książkęPoleć książkę { greeting : Cze(cid:258)(cid:202), , name : Lorna } curl -H Accept: text/html;q=0.5,application/json http://localhost/book/hello.php { greeting : Cze(cid:258)(cid:202), , name : Lorna } Je(cid:264)li chcesz wys(cid:228)a(cid:232) te (cid:276)(cid:241)dania z poziomu PHP, to mo(cid:276)esz ustawi(cid:232) odpowied- nie nag(cid:228)ówki przy tworzeniu (cid:276)(cid:241)dania. Poni(cid:276)ej znajduje si(cid:246) przyk(cid:228)ad napi- sany przy u(cid:276)yciu rozszerzenia PHP curl, wysy(cid:228)aj(cid:241)cy takie same (cid:276)(cid:241)dania jak poprzednio: ?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(cid:228)ugiwanych nag(cid:228)ówków zale(cid:276)y od konkretnej aplikacji. Dobrym pomys(cid:228)em jest oferowanie ró(cid:276)nych typów tre(cid:264)ci, takich jak JSON i XML, a nawet czystego tekstu. Wszystko zale(cid:276)y od rodzaju programu i potrzeb jego u(cid:276)ytkowników. Ale je(cid:264)li zdecydujesz si(cid:246) wprowadzi(cid:232) obs(cid:228)ug(cid:246) ró(cid:276)nych typów tre(cid:264)ci, to wiesz ju(cid:276), jak to najlepiej zrobi(cid:232). Zabezpieczanie (cid:348)(cid:233)da(cid:295) za pomoc(cid:233) nag(cid:293)ówka Authorization Nag(cid:228)ówki mog(cid:241) dostarcza(cid:232) informacje pozwalaj(cid:241)ce na zidentyfikowanie u(cid:276)yt- kownika. Oddzielenie ich od danych aplikacji wszystko upraszcza i cz(cid:246)sto sprawia, (cid:276)e aplikacja jest bezpieczniejsza. Je(cid:264)li chodzi o bezpiecze(cid:254)stwo u(cid:276)ytkowników interfejsów API, to do us(cid:228)ug sieciowych maj(cid:241) zastosowanie wszystkie techniki stosowane przy zabezpieczaniu serwisów internetowych. Nie trzeba wymy(cid:264)la(cid:232) niczego nowego, cho(cid:232) nieraz widzia(cid:228)am, jak kto(cid:264) wynajdywa(cid:228) ko(cid:228)o na nowo, zamiast u(cid:276)ywa(cid:232) ju(cid:276) gotowych standardów. Podstawowe uwierzytelnianie HTTP Jednym z najprostszych sposobów na zabezpieczenie strony internetowej jest u(cid:276)ycie podstawowego uwierzytelniania HTTP. Polega ono na przesy- (cid:228)aniu w nag(cid:228)ówku Authorization ka(cid:276)dego (cid:276)(cid:241)dania zaszyfrowanych danych 38 (cid:95) Rozdzia(cid:293) 3. Nag(cid:293)ówki Kup książkęPoleć książkę po(cid:264)wiadczaj(cid:241)cych u(cid:276)ytkownika. Zasada dzia(cid:228)ania tej techniki jest bardzo prosta: klient otrzymuje nazw(cid:246) u(cid:276)ytkownika i has(cid:228)o i wykonuje nast(cid:246)puj(cid:241)ce czynno(cid:264)ci: 1. (cid:227)(cid:241)czy nazw(cid:246) u(cid:276)ytkownika i has(cid:228)o w (cid:228)a(cid:254)cuch nazwau(cid:285)ytkownika:has(cid:239)o. 2. Koduje wynik w formacie Base64. 3. Wysy(cid:228)a dane w nag(cid:228)ówku, np. Authorization: Basic (cid:239)a(cid:241)cuch w formacie base64. 4. Jako (cid:276)e tokeny s(cid:241) przesy(cid:228)ane w postaci tekstowej, powinno si(cid:246) u(cid:276)ywa(cid:232) protoko(cid:228)u HTTPS. W opisany sposób mo(cid:276)na utworzy(cid:232) nag(cid:228)ówek r(cid:246)cznie albo u(cid:276)y(cid:232) specjal- nych wbudowanych narz(cid:246)dzi. Poni(cid:276)ej znajduje si(cid:246) przyk(cid:228)ad napisany przy u(cid:276)yciu rozszerzenia curl, wysy(cid:228)aj(cid:241)cy do strony (cid:276)(cid:241)danie pod ochron(cid:241) 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(cid:246)zyku PHP wszystkie potrzebne informacje mo(cid:276)na znale(cid:274)(cid:232) w zmiennej superglobalnej $_SERVER. Je(cid:264)li u(cid:276)ywane jest podstawowe uwierzytelnianie, nazw(cid:246) u(cid:276)ytkownika i has(cid:228)o mo(cid:276)na znale(cid:274)(cid:232) odpowiednio w elementach $_SERVER[ PHP_AUTH_USER ] i $_SERVER[ PHP_AUTH_PASSWORD ]. Je(cid:276)eli kto(cid:264) wy(cid:264)le (cid:276)(cid:241)danie bez danych po(cid:264)wiadczaj(cid:241)cych lub z niepoprawnymi informacjami, serwer zamiast (cid:276)(cid:241)danej tre(cid:264)ci mo(cid:276)e zwróci(cid:232) kod statusu 401 Unauthorized. OAuth Inn(cid:241) metod(cid:241) zabezpieczania serwisów internetowych, przydatn(cid:241) szcze- gólnie wtedy, gdy jaki(cid:264) zewn(cid:246)trzny odbiorca pobiera dane nale(cid:276)(cid:241)ce do u(cid:276)ytkownika, jest OAuth (http://oauth.net/). OAuth to standardowa techni- ka umo(cid:276)liwiaj(cid:241)ca konsumentowi udost(cid:246)pnienie innemu u(cid:276)ytkownikowi swoich danych, które s(cid:241) przechowywane przez dostawc(cid:246), z którym u(cid:276)ytkow- nik ten jest w jaki(cid:264) sposób powi(cid:241)zany, bez podawania has(cid:228)a. U(cid:276)ytkownik wchodzi na stron(cid:246) dostawcy w celu weryfikacji swojej to(cid:276)samo(cid:264)ci i przy- dzielenia praw dost(cid:246)pu odbiorcy i mo(cid:276)e cofn(cid:241)(cid:232) te uprawnienia w dowolnym Najcz(cid:253)(cid:316)ciej u(cid:348)ywane nag(cid:293)ówki HTTP (cid:95) 39 Kup książkęPoleć książkę momencie. W metodzie tej dostawca mo(cid:276)e odró(cid:276)ni(cid:232) (cid:276)(cid:241)dania wysy(cid:228)ane przez u(cid:276)ytkownika od (cid:276)(cid:241)da(cid:254) wysy(cid:228)anych przez co(cid:264) lub kogo(cid:264) innego w imieniu te- go u(cid:276)ytkownika. Szczegó(cid:228)owy opis protoko(cid:228)u OAuth wykracza poza tematyk(cid:246) tej ksi(cid:241)(cid:276)ki (je(cid:264)li chcesz dowiedzie(cid:232) si(cid:246) wi(cid:246)cej na jego temat, mo(cid:276)esz si(cid:246)gn(cid:241)(cid:232) np. po ksi(cid:241)(cid:276)- k(cid:246) Getting Started with OAuth 2.0 wydawnictwa O’Reilly). Wspominam o nim, poniewa(cid:276) wykorzystuje on nag(cid:228)ówek Authorization i jest powszechnie u(cid:276)ywany w ró(cid:276)nych API. Nag(cid:293)ówki niestandardowe Jak prawie ka(cid:276)dy aspekt protoko(cid:228)u HTTP, zestaw dost(cid:246)pnych nag(cid:228)ówków nie jest sta(cid:228)y. Je(cid:264)li kto(cid:264) chce przes(cid:228)a(cid:232) informacje, dla których nie ma odpo- wiedniego nag(cid:228)ówka, to mo(cid:276)e wymy(cid:264)li(cid:232) w(cid:228)asny. Jedynym warunkiem jest, aby nazwy takich niestandardowych nag(cid:228)ówków poprzedzi(cid:232) znakami X-. Dobrym przyk(cid:228)adem, który cz(cid:246)sto mo(cid:276)na spotka(cid:232) w sieci, jest narz(cid:246)dzie Varnish (https://www.varnish-cache.org/), dodaj(cid:241)ce do odpowiedzi w(cid:228)asne na- g(cid:228)ówki. Zainstalowa(cid:228)am je tak(cid:276)e w swoim serwisie, dzi(cid:246)ki czemu w (cid:276)(cid:241)daniach znajduj(cid:246) nast(cid:246)puj(cid:241)ce informacje: HTTP/1.1 302 Found Server: Apache/2.2.14 (Ubuntu) Location: http://www.lornajane.net/ Content-Type: text/html; charset=iso-8859-1 Content-Length: 288 Date: Tue, 11 Dec 2012 15:53:46 GMT X-Varnish: 119643096 119643059 Age: 5 Via: 1.1 varnish Connection: keep-alive Ten dodatkowy nag(cid:228)ówek X-Varnish stanowi dowód, (cid:276)e (cid:276)(cid:241)danie zosta(cid:228)o ob- s(cid:228)u(cid:276)one przez narz(cid:246)dzie Varnish. Nie jest to oficjalny nag(cid:228)ówek i dlatego przed jego nazw(cid:241) znajduj(cid:241) si(cid:246) znaki X-. W interfejsach API dost(cid:246)pnych w sieci mo(cid:276)na znale(cid:274)(cid:232) wiele ró(cid:276)nych nag(cid:228)ówków tego typu. Innym doskona(cid:228)ym przyk(cid:228)adem jest serwis GitHub (http://developer.github.com). Oto, jak(cid:241) odpowied(cid:274) otrzymuj(cid:246), gdy wy(cid:264)l(cid:246) (cid:276)(cid:241)danie listy repozytoriów zwi(cid:241)zanych z moim kontem (http://api.github.com/users/lornajane/repos): HTTP/1.1 200 OK Server: nginx Date: Tue, 11 Dec 2012 16:01:00 GMT Content-Type: application/json; charset=utf-8 Connection: keep-alive 40 (cid:95) Rozdzia(cid:293) 3. Nag(cid:293)ówki Kup książkęPoleć książkę Status: 200 OK X-Content-Type-Options: nosniff Cache-Control: public, max-age=60, s-maxage=60 X-GitHub-Media-Type: github.beta X-RateLimit-Limit: 60 Content-Length: 106586 Last-Modified: Sat, 01 Dec 2012 11:23:32 GMT Vary: Accept X-RateLimit-Remaining: 59 ETag: 8c0bde8e577f52c7f68de5d7099e041b W przyk(cid:228)adzie tym znajduje si(cid:246) kilka niestandardowych nag(cid:228)ówków, ale na szczególn(cid:241) uwag(cid:246) zas(cid:228)uguj(cid:241) te zbudowane wg wzoru X-RateLimit-*, które sprawdzaj(cid:241), czy nie jest wysy(cid:228)anych zbyt wiele (cid:276)(cid:241)da(cid:254). Przy u(cid:276)yciu takich niestandardowych nag(cid:228)ówków mi(cid:246)dzy klientem i serwerem mo(cid:276)na przes(cid:228)a(cid:232) dodatkowe dane, które nie nale(cid:276)(cid:241) do tre(cid:264)ci g(cid:228)ównej. Dzi(cid:246)ki temu (cid:276)adne in- formacje nie mieszaj(cid:241) si(cid:246) ze sob(cid:241). Nag(cid:293)ówki niestandardowe (cid:95) 41 Kup książkęPoleć książkę 42 (cid:95) Rozdzia(cid:293) 3. Nag(cid:293)ówki Kup książkęPoleć książkę A adres URL, 24, 74 adres URL obrazu, 61 aktualizowanie rekordów, 81 analizator protoko(cid:228)ów sieciowych, 91 API, 13 API typu RESTful, 53, 78 autentykacja, 19 autoryzacja, 82 B bezpiecze(cid:254)stwo, 38 biblioteka WURFL, 34 biblioteki typu mimeparse, 37 b(cid:228)(cid:246)dy, 88, 109–114 buforowanie, 84 C certyfikaty SSL, 95 ciasteczka, cookies, 17 ciasteczko data wyga(cid:264)ni(cid:246)cia, 47 (cid:264)ledzenie sesji, 47 tworzenie, 46 wysy(cid:228)anie, 44 zapisywanie w pliku, 44 zasada dzia(cid:228)ania, 43 cookie, Patrz ciasteczko CRUD, create, read, update, delete, 73 czasownik HTTP DELETE, 28 GET, 23 POST, 25 PUT, 29 D dane cookie, 43 wyj(cid:264)ciowe, 88 data wyga(cid:264)ni(cid:246)cia ciasteczka, 47 debugowanie, 95 diagnozowanie danych wyj(cid:264)ciowych, 88 spoza aplikacji, 90 usterek, 87 dodatki dla przegl(cid:241)darek, 18 dodawanie kontekstu, 27 dokumentacja API, 116 interaktywna, 117 ogólna, 115 DOM, 59 dost(cid:246)p do atrybutów, 61 dziennik b(cid:228)(cid:246)dów serwera, 89 dzienniki, 88 E element, Patrz znacznik F format Base64, 83 HTML, 101 JSON, 16, 49–55, 74 XML, 16, 57–62 formaty danych, 45, 101 wyj(cid:264)ciowe, 109 formularz, 24, 26 funkcja curl_setopt(), 20 error_log(), 89 file_get_contents(), 21, 29, 54, 60 http_build_query(), 27 json_decode(), 52, 54 json_encode(), 51, 54 parse_str(), 29 parseAcceptHeader(), 36 print_r(), 88 setcookie(), 46 stream_context_create(), 27 var_dump(), 52, 67, 88 Skorowidz funkcje programu Charles, 96 strumieniowe, 25 G generowanie pliku WSDL, 69 gists, 52 H hipermedia, 77 HTTP, HyperText Transfer Protocol, 11 I idempotencja, 82 identyfikator URI, 68 identyfikowanie u(cid:276)ytkownika, 38 informacje o b(cid:228)(cid:246)dach, 65 o typach danych, 52 o (cid:276)(cid:241)daniach, 95 z ciasteczek, 44 instrukcja switch-case, 65 interfejs API, 52, 60, 99 J jednolito(cid:264)(cid:232), 105 j(cid:246)zyk PHP, 7 WSDL, 67 Notation, 49 K JSON, JavaScript Object klasa JsonView, 112 Library, 71 SoapClient, 68 125 Kup książkęPoleć książkę klasa SoapServer, 68 WSDLCreator, 69 klient, 13 PHP, 71 SOAP, 67 klucze API, 83 kod PHP, 13 statusu, 121, 122 statusu 200, 54 statusu 400, 65 statusu 401, 39, 83 kontekst, 27 kontroler frontowy, 110 L liczba obs(cid:228)ugiwanych nag(cid:228)ówków, 38 M metoda asXML(), 58 getCountryList(), 66 getResponseBody(), 21 send(), 21 saveXML(), 58 metody komunikacji, 14 model MVC, 111 MVC, model, view, controller, 111 N nag(cid:228)ówek Accept, 32–37, 123 Accept-Charset, 35 Accept-Encoding, 35 Accept-Language, 35 Authorization, 32, 38, 123 Authorization, 54 Content, 35 Content-Length, 26, 123 Content-Type, 20, 26, 32–35, 123 Cookie, 32, 123 ETag, 124 If-Modified Since, 85, 124 If-None-Match, 84, 124 Last-Modified, 124 Location, 124 Set-Cookie, 32, 124 User-Agent, 33, 124 WWW-Authenticate, 83 X-Varnish, 40 126 (cid:95) Skorowidz nag(cid:228)ówki, 123 autoryzacyjne, 82 buforowania, 84 ciasteczek, 46 do negocjacji tre(cid:264)ci, 34 jednostek, 32 niestandardowe, 40 odpowiedzi, 12, 32 (cid:276)(cid:241)da(cid:254), 12, 32 narz(cid:246)dzia przegl(cid:241)darek internetowych, 18 narz(cid:246)dzie Charles, 94 Curl, 15, 20, 25 Developer Toolbar, 18 FireBug, 18 I/O Docs, 119 LiveHTTPHeaders, 18 ModHeader, 19 pecl_http, 21 php2wsdl, 69 soapUI, 66 tcpdump, 92 Varnish, 40 WinDump, 92 Wireshark, 91 XMLParser, 60 XMLReader, 60 XMLWriter, 60 nazwy funkcji, 106 negocjowanie tre(cid:264)ci, 35 niezawodna us(cid:228)uga, 105 notacja tablicowa, 61 w(cid:246)gierska, 106 O OAuth, 39, 83 obiekt typu HTTPRequest, 21 obs(cid:228)uga b(cid:228)(cid:246)dów, 109–114 ciasteczek, 17 dzienników, 90 formatów, 35 formatu XML, 58 formularzy, 26 strumieni, 24 wyj(cid:264)cia, 112 (cid:276)(cid:241)da(cid:254) HTTP, 14, 22 odczytywanie rekordów, 80 odpowiedzi HTTP, 11 okre(cid:264)lanie poziomu b(cid:228)(cid:246)dów, 90 opakowanie, 64 opcja CURLOPT_HTTPHEADER, 54 CURLOPT_ POSTFIELDS, 54 Follow TCP stream, 93 opcje konfiguracyjne, 102 opowie(cid:264)ci u(cid:276)ytkowników, 99 P para klucz-warto(cid:264)(cid:232), 16, 46 parametr action, 65 format, 63 location, 68 method, 63 q, 35 tags, 63 pastebin, 52 PHP, 19 przechwytywanie danych, 92 przegl(cid:241)darki internetowe, 18 przekierowanie, 13 przepisywanie (cid:276)(cid:241)da(cid:254), 97 przesy(cid:228)anie informacji, 73 stanu reprezentacyjnego, 73 przewidywalno(cid:264)(cid:232) struktur, 107 generowanie pliku WSDL, 69 klient SOAP, 67 praca z ciasteczkami, 46 praca z formatem JSON, 51 praca z formatem XML, 59 serwer SOAP, 68 plik cookiejar, 44 cookies.txt, 45 github_creds.php, 53 php.ini, 88 pliki WSDL, 66–71 pobieranie danych, 54, 60 portal GitHub, 40, 52 powiadomienia o b(cid:228)(cid:246)dach, 112 procedura obs(cid:228)ugi b(cid:228)(cid:246)dów, 111 program, Patrz narz(cid:246)dzie projektowanie interfejsu API, 99 us(cid:228)ug, 99 protoko(cid:228)y bezstanowe, 43 protokó(cid:228) FTP, 21 HTTP, 11 HTTPS, 39 OAuth, 40, 83 SOAP, 66 SSL, 21, 95 WebDAV, 28 Kup książkęPoleć książkę R rekordy aktualizowanie, 81 odczytywanie, 80 usuwanie, 82 repozytorium gist, 53, 74 PECL, 21 reprezentacje zasobów, 73 REST, REpresentational State Transfer, 73–85 dodatkowe nag(cid:228)ówki, 82 elementy HTTP, 79 przydatno(cid:264)(cid:232) technologii, 85 rodzaje negocjacji, 35 rozszerzenie Edit This Cookie, 19 pecl_http, 19, 27, 29 PHP Filter, 107 SimpleXML, 59, 61 RPC, Remote Procedure Call, 63 ruch https, 96 S, (cid:315) samouczki, 119 segregowanie b(cid:228)(cid:246)dów, 113 serwer, 13 PHP, 71 SOAP, 68 SimpleXML, 59, 61 spójno(cid:264)(cid:232), 106 SSL, Secure Socket Layer, 95 struktura strumie(cid:254) danych, 107 zasobów, 74 STDERR, 16 STDOUT, 16 TCP, 93 symbole wieloznaczne, 35 (cid:264)ledzenie strumienia TCP, 93 T tablica $_COOKIE, 46 $_POST, 26 $_SERVER, 28, 34 token dost(cid:246)powy, 54 tworzenie ciasteczek, 46 kodu klienta, 14 niezawodnych us(cid:228)ug, 105 pliku wsdl, 70 repozytorium, 53 us(cid:228)ug sieciowych, 14 zasobów, 79 (cid:276)(cid:241)dania, 24 typy danych, 78 mediów, 79 us(cid:228)ug, 100 U udost(cid:246)pnianie kodu (cid:274)ród(cid:228)owego, 52 us(cid:228)ugi, 64 URI, Uniform Resource Identifier, 68 us(cid:228)uga, 99 us(cid:228)ugi JSON-RPC, 65 XML-RPC, 64, 65 niezawodne, 105 RESTful, 73–85 RPC, 63 sieciowe, 14 SOAP, 65 ustawienia domy(cid:264)lne, 103 usterki, 87 usuwanie rekordów, 82 uwierzytelnianie, 60, 82, 83 uwierzytelnianie HTTP, 38 u(cid:276)ywanie API typu RESTful, 78 formatu JSON, 50 formatu XML, 59 nag(cid:228)ówka User-Agent, 33 nag(cid:228)ówków Accept, 37 rozszerzenia Curl, 25, 28, rozszerzenia pecl_http, 27, 38, 39 29 W weryfikacja danych, 106 WSDL, Web Service Description Language, 66 wybór formatów danych, 101 typu us(cid:228)ugi, 100 wymiana ciasteczek, 44 wysy(cid:228)anie (cid:276)(cid:241)da(cid:254), 14 GET, 23 POST, 25 wyszukiwarka Google, 13 wywo(cid:228)anie narz(cid:246)dzia Curl, 20 X XMLParser, 60 XMLReader, 60 XMLWriter, 60 Z zabezpieczanie serwisów internetowych, 39 (cid:276)(cid:241)da(cid:254), 38 zapisywanie b(cid:228)(cid:246)dów, 88 zasady dzia(cid:228)ania ciasteczek, 43 weryfikacji danych, 106 zasoby, 74, 79 zasób, 100 zdalne wywo(cid:228)ywanie procedur, 63 zmienna $_SERVER, 39 $_COOKIE, 46 $_POST, 28 $_PUT, 29 $_SERVER, 29 $access_token, 53 $url, 29 zmienne znacznik globalne, 24 superglobalne, 39 img , 62 item , 58 list , 58 photos , 62 do ustawiania ciasteczek, 46 ETag, 84 znaki X-, 40 (cid:347) (cid:276)(cid:241)dania HTTP, 11 (cid:276)(cid:241)danie DELETE, 28 GET, 19, 23, 60 listy repozytoriów, 40 POST, 15, 20, 22, 25 PUT, 29 Skorowidz (cid:95) 127 Kup książkęPoleć książkę O autorce Lorna Jane Mitchell jest niezale(cid:276)n(cid:241) konsultantk(cid:241) ds. programowania sie- ciowego, specjalizuj(cid:241)c(cid:241) si(cid:246) w j(cid:246)zyku PHP i interfejsach API. Przez ponad 10 lat pracy z j(cid:246)zykiem PHP cz(cid:246)sto uczy(cid:228)a si(cid:246) na w(cid:228)asnych b(cid:228)(cid:246)dach i dzi(cid:246)ki temu ma wiele ciekawych rzeczy do opowiedzenia. Ponadto Mitchell jest do(cid:264)wiadczon(cid:241) trenerk(cid:241). Prowadzi szkolenia zarówno dla klientów prywatnych z ca(cid:228)ego (cid:264)wiata, jak i ogólnodost(cid:246)pne kursy. Jest te(cid:276) (cid:264)wietn(cid:241) pisark(cid:241). Oprócz rozmaitych publikacji pisze te(cid:276) bloga pod adresem http://lornajane.net. Kolofon Zwierz(cid:246) na ok(cid:228)adce ksi(cid:241)(cid:276)ki API nowoczesnej strony WWW. Us(cid:228)ugi sieciowe w PHP to p(cid:228)ochacz halny (Prunella collaris). Zdj(cid:246)cie pochodzi z encyklopedii Animate Creation J.G. Wooda. Kup książkęPoleć książkę
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

API nowoczesnej strony WWW. Usługi sieciowe w PHP
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ą: