O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Programowanie aplikacji na serwisy społecznościowe

Book Description

W trakcie lektury nauczysz się odwzorowywać relacje pomiędzy użytkownikami oraz dostosowywać dostarczane im treści na podstawie danych zawartych w ich profilach. Ponadto zdobędz...

Table of Contents

  1. Programowanie aplikacji na serwisy społecznościowe
  2. Dedykacja
  3. Słowo wstępne
    1. Kto powinien sięgnąć po tę książkę?
    2. Treść książki
    3. Stosowanie stosu technologii open source
    4. Konwencje stosowane w książce
    5. Stosowanie przykładów kodu
    6. Podziękowania
  4. 1. Podstawowe pojęcia związane z kontenerem aplikacji społecznościowych
    1. Czym jest kontener aplikacji społecznościowych?
      1. Profil użytkownika
      2. Znajomi i powiązania użytkownika
      3. Strumień aktywności użytkowników
    2. Implementacja zastrzeżonych i otwartych standardów
      1. Implementacja zastrzeżona
      2. Implementacja typu open source
      3. Dlaczego w tej książce zostaną omówione otwarte standardy?
    3. Wbudowana aplikacja — tworzenie rozwiązań w ramach czarnej skrzynki
    4. Wbudowane zabezpieczenia aplikacji
      1. Ataki XSS
      2. Zasada tego samego pochodzenia i starsze przeglądarki
      3. Pobieranie plików bez wiedzy użytkownika
      4. Zabezpieczanie aplikacji
    5. Aplikacja zewnętrzna — integracja danych serwisu społecznościowego poza kontenerem
    6. Widoki aplikacji
      1. Widok domowy (mały)
      2. Widok profilu (mały)
      3. Widok kanwy (duży)
      4. Domyślny widok (dowolny)
    7. Zagadnienia związane z uprawnieniami aplikacji
    8. Aplikacje strony klienckiej kontra aplikacje serwera
      1. Stosowanie systemów szablonów w warstwie znaczników
      2. Stosowanie mieszanego środowiska serwera i klienta
      3. Opóźnianie ładowania mniej ważnej treści
    9. Kiedy dobra aplikacja okazuje się zła?
      1. Przenośna aplikacja z animacjami
      2. Niedopracowany widok
      3. Aplikacja kopiująca widoki
      4. Aplikacja prezentująca zbyt dużo informacji
      5. Nierentowna aplikacja
      6. Aplikacja informacyjna
    10. Studia przypadków dla modeli aplikacji
      1. Studium przypadku: gra społecznościowa ze znajomymi
        1. Zrozumieć grupę odbiorców
        2. Budowanie grafu powiązań w ramach gry
        3. Możliwość wzajemnej interakcji znajomych w grze
        4. Jasne korzyści z działań podejmowanych w grze
        5. Integracja kanałów społecznościowych za pośrednictwem poczty elektronicznej, powiadomień i czynności
        6. Zarabianie na sprzedaży wirtualnych towarów
      2. Studium przypadku: aplikacje sprzedaży produktów
        1. Gry to nie wszystko
        2. Nowa realizacja starej koncepcji
        3. Prowokowanie dyskusji w celu uzyskiwania i przekazywania informacji
        4. Przekazywanie usług w formie podarunków
      3. Studium przypadku: aplikacje uwzględniające położenie użytkownika
        1. Spotykanie przyjaciół
        2. Udostępnianie odznak i punktów
        3. Oferowanie współzawodnictwa (tablice wyników)
        4. Kierowanie reklam według lokalizacji i profilu
        5. Oferowanie promocji we współpracy z lokalnymi firmami
    11. Krótkie wskazówki na początek
      1. Należy zdefiniować docelowych odbiorców
      2. Możliwie wczesne budowanie punktów integracji z serwisem społecznościowym
      3. Budowanie z myślą o elementach komercyjnych
      4. Tworzenie dopracowanych, atrakcyjnych widoków
  5. 2. Odwzorowywanie relacji użytkowników na podstawie grafu powiązań społecznościowych
    1. Graf powiązań społecznościowych w internecie
    2. Stosowanie grafu rzeczywistych powiązań społecznościowych w wirtualnym świecie
      1. Automatyczne dzielenie użytkowników na klastry
      2. Prywatność i bezpieczeństwo
      3. Budowanie zaufania
    3. Udostępnianie prywatnych danych użytkownika: model opt-in kontra model opt-out
      1. Model udostępniania za zgodą użytkownika (opt-in)
      2. Model wyłączania udostępniania na wniosek użytkownika (opt-out)
    4. Zrozumienie modelu relacji
      1. Model śledzenia
        1. Przykład
        2. Prywatność
      2. Model połączeń
        1. Przykład
        2. Prywatność
      3. Model grupowy
        1. Prosty model grupowy — grupy definiowane przez użytkownika
          1. Przykład
          2. Prywatność
        2. Złożony model grupowy — automatyczne dzielenie na klastry
          1. Przykład
          2. Prywatność
    5. Relacje kontra podmioty
    6. Budowanie związków społecznościowych — analiza grafu powiązań społecznościowych Facebooka
      1. Budowanie na bazie rzeczywistych tożsamości
      2. Zrozumienie najskuteczniejszych kanałów komunikacji
      3. Budowanie grup użytkowników
      4. Unikanie grafów nieistotnych powiązań społecznościowych
    7. Wskazywanie lubianych i nielubianych podmiotów za pośrednictwem protokołu OpenLike
      1. Integracja widgetu OpenLike
      2. Sposób prezentowania oznaczeń „Lubię to”
    8. Podsumowanie
  6. 3. Tworzenie podstawowych elementów platformy aplikacji społecznościowych
    1. Czego nauczysz się w tym rozdziale?
    2. Apache Shindig
    3. Konfiguracja kontenera Shindig
      1. Instalacja kontenera Shindig w systemie Mac OS X (Leopard)
        1. Wymagania
      2. Instalacja kontenera Shindig w systemie Windows
        1. Wymagania
      3. Testowanie instalacji kontenera Shindig
    4. Partuza
      1. Wymagania
      2. Instalacja kontenera Partuza w systemie Mac OS X (Leopard)
      3. Instalacja kontenera Partuza w systemie Windows
      4. Testowanie instalacji kontenera Partuza
    5. Specyfikacja gadżetu OpenSocial w formacie XML
    6. Konfigurowanie aplikacji za pomocą węzła ModulePrefs
      1. Elementy Require i Optional
      2. Element Preload
      3. Element Icon
      4. Element Locale
      5. Element Link
    7. Definiowanie preferencji użytkownika
      1. Wyliczeniowe typy danych
    8. Treść aplikacji
      1. Definiowanie widoków treści
        1. Tworzenie sekcji Content
        2. Tworzenie wielu sekcji Content
        3. Tworzenie pojedynczej sekcji Content z wieloma widokami
        4. Tworzenie kaskadowych sekcji Content
        5. Przechodzenie pomiędzy widokami
        6. Przekazywanie danych pomiędzy widokami
        7. Tworzenie i stosowanie podwidoków
        8. Definiowanie widoków dla błędów
      2. Treść wbudowana kontra treść zewnętrzna
    9. Budowanie kompletnego gadżetu
  7. 4. Definiowanie funkcji za pomocą odwołań JavaScriptu do elementów standardu OpenSocial
    1. Czego nauczysz się w tym rozdziale?
    2. Dołączanie bibliotek JavaScriptu z funkcjami standardu OpenSocial
    3. Dynamiczne ustawianie wysokości widoku gadżetu
    4. Umieszczanie animacji Flash w ramach gadżetu
    5. Wyświetlanie komunikatów dla użytkowników
      1. Tworzenie komunikatu
        1. Komunikat z możliwością zamknięcia
        2. Komunikaty statyczne
        3. Komunikaty czasowe
      2. Określanie położenia okien komunikatów
        1. Określanie położenia pojedynczego okna komunikatu
        2. Określanie położenia wszystkich komunikatów
      3. Definiowanie stylów komunikatów i okien
        1. Stosowanie stylów dla treści komunikatów
        2. Definiowanie stylu pojedynczego okna komunikatu
        3. Określanie stylu wszystkich wyświetlanych okien komunikatów
    6. Zapisywanie stanu z preferencjami użytkownika
    7. Programowe ustawianie tytułu gadżetu
    8. Integracja interfejsu użytkownika gadżetu z podziałem na zakładki
      1. Podstawowy gadżet
      2. Tworzenie zakładki na podstawie kodu języka znaczników
      3. Tworzenie zakładki w kodzie JavaScriptu
      4. Uzyskiwanie i ustawianie informacji na temat obiektu TabSet
        1. Wyrównywanie zakładek
        2. Wyświetlanie i ukrywanie zakładek
        3. Uzyskiwanie kontenera macierzystego
        4. Odczytywanie aktualnie zaznaczonej zakładki
        5. Uzyskiwanie tablicy wszystkich zakładek
        6. Usuwanie zakładki
        7. Ustawianie zaznaczonej zakładki
        8. Zamiana miejsc zakładek
        9. Odczytywanie i ustawianie informacji dotyczących zakładki
        10. Uzyskiwanie funkcji wywołania zwrotnego zakładki
        11. Uzyskiwanie kontenera treści
        12. Odczytywanie pozycji zakładki
        13. Odczytywanie nazwy zakładki
        14. Odczytywanie etykiety zakładki
    9. Rozszerzanie kontenera Shindig o własne biblioteki języka JavaScript
    10. Budowanie kompletnego gadżetu
      1. Przygotowanie specyfikacji XML gadżetu
      2. Wyświetlanie gadżetu przy użyciu kontenera Shindig
  8. 5. Przenoszenie aplikacji, profili i znajomych
    1. Czego nauczysz się w tym rozdziale?
    2. Ocena obsługi standardu OpenSocial
    3. Podstawowe elementy specyfikacji OpenSocial
      1. Specyfikacja podstawowego serwera API
      2. Specyfikacja podstawowego kontenera gadżetów
      3. Specyfikacja serwera społecznościowego interfejsu API
      4. Specyfikacja kontenera gadżetów społecznościowych
      5. Specyfikacja kontenera OpenSocial
    4. Tworzenie rozwiązań dla wielu kontenerów i przenoszenie aplikacji
      1. Stosowanie mieszanego środowiska klient-serwer
      2. Oddzielanie funkcji społecznościowych od podstawowego kodu aplikacji
      3. Unikanie znaczników właściwych konkretnym kontenerom
    5. Przenoszenie aplikacji z Facebooka do kontenera OpenSocial
      1. Stosowanie ramek iframe dla konstrukcji niebędących aplikacjami społecznościowymi
      2. Wyodrębnianie logiki funkcji Facebooka
      3. Oddzielenie kodu znaczników (wizualizacji) od logiki programu
      4. Stosowanie punktów końcowych REST zamiast języka FQL
      5. Stosowanie implementacji z zasadniczą częścią kodu po stronie serwera
    6. Personalizacja aplikacji na podstawie danych zawartych w profilu
      1. Obiekt Person
      2. Metody wymiany danych obiektu Person
        1. osapi.people.get
          1. Lista parametrów
          2. Przykładowe żądanie
        2. osapi.people.getViewer
          1. Lista parametrów
          2. Przykładowe żądanie
        3. osapi.people.getViewerFriends
          1. Lista parametrów
          2. Przykładowe żądanie
        4. osapi.people.getOwner
          1. Lista parametrów
          2. Przykładowe żądanie
        5. osapi.people.getOwnerFriends
          1. Lista parametrów
          2. Przykładowe żądanie
      3. Pola dostępne w ramach obiektu Person
        1. opensocial.Person.Field.ABOUT_ME
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        2. opensocial.Person.Field.ACTIVITIES
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        3. opensocial.Person.Field.ADDRESSES
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        4. opensocial.Person.Field.AGE
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        5. opensocial.Person.Field.BODY_TYPE
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        6. opensocial.Person.Field.BOOKS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        7. opensocial.Person.Field.CARS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        8. opensocial.Person.Field.CHILDREN
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        9. opensocial.Person.Field.CURRENT_LOCATION
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        10. opensocial.Person.Field.DATE_OF_BIRTH
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
        11. opensocial.Person.Field.DRINKER
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        12. opensocial.Person.Field.EMAILS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        13. opensocial.Person.Field.ETHNICITY
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        14. opensocial.Person.Field.FASHION
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        15. opensocial.Person.Field.FOOD
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        16. opensocial.Person.Field.GENDER
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        17. opensocial.Person.Field.HAPPIEST_WHEN
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        18. opensocial.Person.Field.HAS_APP
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        19. opensocial.Person.Field.HEROES
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        20. opensocial.Person.Field.HUMOR
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        21. opensocial.Person.Field.ID
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        22. opensocial.Person.Field.INTERESTS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        23. opensocial.Person.Field.JOB_INTERESTS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        24. opensocial.Person.Field.JOBS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        25. opensocial.Person.Field.LANGUAGES_SPOKEN
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        26. opensocial.Person.Field.LIVING_ARRANGEMENT
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        27. opensocial.Person.Field.LOOKING_FOR
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        28. opensocial.Person.Field.MOVIES
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        29. opensocial.Person.Field.MUSIC
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        30. opensocial.Person.Field.NAME
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        31. opensocial.Person.Field.NETWORK_PRESENCE
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        32. opensocial.Person.Field.NICKNAME
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        33. opensocial.Person.Field.PETS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        34. opensocial.Person.Field.PHONE_NUMBERS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        35. opensocial.Person.Field.POLITICAL_VIEWS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        36. opensocial.Person.Field.PROFILE_SONG
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        37. opensocial.Person.Field.PROFILE_URL
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        38. opensocial.Person.Field.PROFILE_VIDEO
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        39. opensocial.Person.Field.QUOTES
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        40. opensocial.Person.Field.RELATIONSHIP_STATUS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        41. opensocial.Person.Field.RELIGION
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        42. opensocial.Person.Field.ROMANCE
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        43. opensocial.Person.Field.SCARED_OF
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        44. opensocial.Person.Field.SCHOOLS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        45. opensocial.Person.Field.SEXUAL_ORIENTATION
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        46. opensocial.Person.Field.SMOKER
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        47. opensocial.Person.Field.SPORTS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        48. opensocial.Person.Field.STATUS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        49. opensocial.Person.Field.TAGS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        50. opensocial.Person.Field.THUMBNAIL_URL
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        51. opensocial.Person.Field.TIME_ZONE
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        52. opensocial.Person.Field.TURN_OFFS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        53. opensocial.Person.Field.TURN_ONS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        54. opensocial.Person.Field.TV_SHOWS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
        55. opensocial.Person.Field.URLS
          1. Obsługa przez kontener:
          2. Typ zwracanej wartości:
          3. Skrócony identyfikator zastępczy:
          4. Opis:
          5. Przykład zwracanej wartości:
      4. Rozszerzanie obiektu Person
        1. Adresy (opensocial.Address)
        2. Budowa ciała (opensocial.BodyType)
        3. Poczta elektroniczna (opensocial.Email)
        4. Wyliczenia (opensocial.Enum)
        5. Nazwisko (opensocial.Name)
        6. Organizacja (opensocial.Organization)
        7. Telefon (opensocial.Phone)
        8. Adres URL (opensocial.Url)
      5. Uzyskiwanie profilu użytkownika
        1. Stara metoda
        2. Nowa metoda
    7. Promowanie aplikacji z wykorzystaniem znajomych użytkownika
      1. Generowanie żądań dotyczących znajomych użytkownika
    8. Budowanie kompletnego gadżetu
      1. Specyfikacja gadżetu
      2. Kod języka znaczników
      3. Kod języka JavaScript
      4. Uruchamianie gadżetu
  9. 6. Aktywność użytkowników, publikowanie powiadomień aplikacji i żądanie danych w kontenerze OpenSocial
    1. Czego nauczysz się w tym rozdziale?
    2. Promocja aplikacji za pomocą strumienia aktywności w kontenerze OpenSocial
      1. Personalizacja aplikacji na podstawie powiadomień w strumieniu aktywności
      2. Generowanie powiadomień w celu zwiększania liczby użytkowników
        1. Umieszczanie komunikatu w strumieniu aktywności użytkownika
        2. Ustawianie priorytetu aktualizacji
        3. Wzbogacanie aktualizacji o treści multimedialne
    3. Pasywne i bezpośrednie publikowanie powiadomień aplikacji
      1. Bezpośrednie publikowanie powiadomień aplikacji
      2. Pasywne publikowanie powiadomień aplikacji
      3. Zrównoważone publikowanie powiadomień
    4. Generowanie żądań AJAX i żądań dostępu do danych zewnętrznych
      1. Generowanie standardowych żądań dostępu do danych
      2. Umieszczanie treści w żądaniach danych
      3. Używanie autoryzowanych żądań do zabezpieczania połączeń
        1. Generowanie autoryzowanego żądania
        2. Weryfikacja podpisanego żądania po stronie serwera
          1. Generowanie podpisanego żądania w kodzie JavaScriptu
          2. Weryfikacja podpisanego żądania po stronie serwera (algorytm RSA-SHA1 z certyfikatem klucza publicznego)
          3. Weryfikacja podpisanego żądania po stronie serwera (algorytm HMAC-SHA1)
    5. Budowanie kompletnego gadżetu
  10. 7. Zaawansowane techniki OpenSocial i przyszłość tego standardu
    1. Czego nauczysz się w tym rozdziale?
    2. Potokowe przesyłanie danych
      1. Rodzaje żądań danych
        1. Żądanie kontenera za pomocą znacznika <os:DataRequest>
        2. Żądanie danych zewnętrznych za pomocą znacznika <os:HttpRequest>
        3. Żądanie danych użytkowników za pomocą znacznika <os:PeopleRequest>
        4. Żądanie danych bieżącego użytkownika i właściciela za pomocą znaczników os:ViewerRequest i os:OwnerRequest
        5. Żądanie zawartości strumienia aplikacji za pomocą znacznika <os:ActivitiesRequest>
      2. Udostępnianie danych dla żądań zewnętrznych
      3. Korzystanie z potokowego przesyłania danych po stronie klienta
        1. Pobieranie obiektów danych
        2. Dodawanie treści do istniejącego obiektu danych
        3. Nasłuchiwanie zmian w obiekcie danych
      4. Obsługa błędów generowanych przez potok danych
      5. Parametry dynamiczne
        1. Stosowanie wartości obiektów UserPrefs i ViewParams w roli atrybutów
        2. Stosowanie wartości odczytanych z potoku danych w roli atrybutów
    3. Szablony OpenSocial
      1. Alternatywny model kodu języka znaczników i danych
        1. Dynamiczne tworzenie węzłów DOM
        2. Generowanie wartości właściwości InnerHTML
        3. Model na bazie szablonów OpenSocial
      2. Wyświetlanie szablonów
        1. Automatyczne wyświetlanie szablonów
          1. Sprawdzanie dostępności danych przed załadowaniem szablonu
          2. Wyświetlanie szablonów przy użyciu aktualizowanych źródeł danych
          3. Wyświetlanie danych za pomocą znaczników niestandardowych
          4. Przekazywanie parametrów za pośrednictwem znaczników niestandardowych
      3. Wyrażenia
      4. Zmienne specjalne
        1. Zmienna Context
        2. Zmienna Cur
          1. Bezpośrednie ustawianie źródła atrybutu cur
        3. Zmienna My
        4. Zmienna Top
      5. Wyrażenia warunkowe
        1. Pierwsza metoda: wartości specjalne
        2. Druga metoda: zwykłe wartości
        3. Wyświetlanie treści zależnie od istnienia wartości
      6. Przetwarzanie treści w pętli
        1. Pierwsza metoda: wartości specjalne
        2. Druga metoda: zwykłe wartości
        3. Stosowanie pętli zagnieżdżonych
        4. Określanie zmiennej indeksu na potrzeby pętli
        5. Przetwarzanie iteracyjne z uwzględnieniem kontekstu
        6. Przetwarzanie iteracyjne z wyrażeniami warunkowymi
      7. Łączenie potokowego przesyłania danych i szablonów
      8. Pozostałe znaczniki specjalne
        1. Znacznik os:Html
        2. Znacznik os:Render
      9. Biblioteki szablonów
        1. Tworzenie biblioteki szablonów
        2. Ładowanie bibliotek szablonów
      10. Interfejs API języka JavaScript
        1. Uzyskiwanie i przetwarzanie szablonu
          1. Uzyskiwanie szablonu
          2. Przetwarzanie szablonu
          3. Wyłączanie automatycznego przetwarzania szablonów
        2. Wyświetlanie szablonu
          1. Wyświetlanie szablonu w zmiennej
          2. Wyświetlanie szablonu w węźle DOM
        3. Praktyczny przykład
    4. Kilka dodatkowych znaczników — język znaczników OpenSocial
      1. Wyświetlanie nazwiska użytkownika — znacznik os:Name
      2. Lista wyboru użytkownika — znacznik os:PeopleSelector
      3. Wyświetlanie odznaki użytkownika — znacznik os:Badge
      4. Ładowanie zewnętrznego kodu HTML — znacznik os:Get
    5. Obsługa lokalizacji za pomocą pakietów komunikatów
    6. Biblioteki API protokołu OpenSocial REST
      1. Dostępne biblioteki
    7. Przyszłość standardu OpenSocial: obszary rozwoju
      1. Kontenery korporacyjne
      2. Mobilna rewolucja
      3. Rozproszone frameworki internetowe
    8. Standard OpenSocial i rozproszone frameworki internetowe
      1. Standard Activity Streams
        1. Jak to może zmienić standard OpenSocial?
      2. Protokół PubSubHubbub
        1. Jak to może zmienić standard OpenSocial?
      3. Protokół Salmon
        1. Jak to może zmienić standard OpenSocial?
      4. Protokół Open Graph
        1. Jak to może zmienić standard OpenSocial?
    9. Budowanie kompletnego gadżetu
  11. 8. Zagadnienia związane z bezpieczeństwem aplikacji społecznościowych
    1. Czego nauczysz się w tym rozdziale?
    2. Wykonywanie zewnętrznego kodu za pośrednictwem ramek iframe
    3. Bezpieczny model — projekt Caja
    4. Dlaczego warto używać kompilatora Caja?
    5. Rodzaje ataków — jak Caja chroni użytkownika?
      1. Przekierowywanie użytkowników bez ich zgody
      2. Śledzenie historii przeglądarki użytkownika
      3. Wykonywanie dowolnego kodu za pomocą funkcji document.createElement
      4. Rejestrowanie klawiszy naciskanych przez użytkownika
    6. Konfiguracja kompilatora Caja
    7. Przetwarzanie skryptów za pomocą kompilatora Caja z poziomu wiersza poleceń
      1. Zabezpieczanie kodu HTML-a i JavaScriptu
        1. Uruchamianie kompilatora
        2. Zabezpieczony kod języka HTML
        3. Zabezpieczony kod języka JavaScript
      2. Zmiana docelowego formatu kodu
    8. Uruchamianie kompilatora Caja z poziomu aplikacji internetowej
    9. Stosowanie kompilatora Caja dla gadżetu OpenSocial
      1. Dodawanie kompilatora Caja do gadżetu
      2. Praktyczny przykład
    10. Wczesne wykrywanie niebezpiecznych elementów JavaScriptu za pomocą narzędzia JSLint
    11. Eksperymenty w środowisku Caja Playground
    12. Wskazówki dotyczące pracy w środowisku Caja
      1. Implementacja modułowego kodu — kompilatora Caja nie należy stosować dla całego projektu
      2. Stosowanie wstępnie przetworzonych bibliotek JavaScriptu
      3. Nie należy używać Firebuga dla przetworzonego kodu źródłowego JavaScriptu
      4. Nie należy umieszczać zdarzeń w kodzie języka znaczników
      5. Centralizacja kodu JavaScriptu — stosowanie wyłącznie żądań danych i kodu języka znaczników
    13. Lżejsza alternatywa dla kompilatora Caja: narzędzie ADsafe
    14. ADsafe kontra Caja — którego narzędzia używać?
    15. Jak zaimplementować środowisko ADsafe?
      1. Konfiguracja obiektu środowiska ADsafe
      2. Obiekt DOM
      3. Wybór konkretnych węzłów DOM za pomocą zapytań
        1. Stosowanie selektorów precyzyjnego wyboru
          1. Selektory właściwości
          2. Selektory atrybutów
          3. Selektory stanu
        2. Budowa zaawansowanych metod zapytań za pomocą dostępnych selektorów
      4. Praca z obiektami pakietów
        1. Metody GET pakietu
        2. Metody SET pakietu
        3. Dodatkowe metody operujące na pakietach
      5. Dołączanie zdarzeń
      6. Definiowanie bibliotek
    16. Budowanie kompletnego gadżetu
      1. Źródło danych
      2. Sekcja nagłówkowa: dołączane skrypty i style
      3. Ciało: warstwa języka znaczników
      4. Ciało: warstwa języka JavaScript
      5. Ostateczny wynik
    17. Podsumowanie
  12. 9. Zabezpieczanie dostępu do grafu powiązań społecznościowych za pomocą standardu OAuth
    1. Punkt wyjścia — uwierzytelnianie podstawowe
      1. Implementacja uwierzytelniania podstawowego — jak to działa?
      2. Wady stosowania uwierzytelniania podstawowego
        1. Klient musi przechowywać informacje potrzebne do logowania
        2. Konieczność wysyłania danych uwierzytelniających w każdym żądaniu
        3. Użytkownicy nie wiedzą, które aplikacje dysponują ich poufnymi danymi
    2. Standard OAuth 1.0a
      1. Przepływ pracy w standardzie OAuth 1.0a
        1. Uzyskanie klucza konsumenta i klucza tajnego
        2. Pobranie tokenu żądania
        3. Pobranie zweryfikowanego przez użytkownika tokenu żądania
        4. Wymiana zweryfikowanego tokenu żądania na token dostępu
      2. Standard OAuth z perspektywy użytkownika końcowego
      3. Dwuetapowa autoryzacja OAuth kontra trzyetapowa autoryzacja OAuth
        1. Implementacja dwuetapowej autoryzacji OAuth w języku JavaScript
          1. Dołączane skrypty
          2. Konstruowanie identyfikatora URI żądania OAuth
          3. Generowanie żądania i obsługa odpowiedzi
      4. Przykład implementacji trzyetapowej autoryzacji OAuth
        1. Implementacja standardu OAuth 1.0a w języku PHP
          1. Wspólne zmienne i funkcje
          2. Uzyskanie tokenu żądania i przekierowanie w ramach autoryzacji
          3. Wymiana tokenu żądania i generowanie żądań danych
        2. Implementacja standardu OAuth 1.0a w języku Python
          1. Plik konfiguracyjny
          2. Wspólne zmienne
          3. Uzyskanie tokenu żądania i przekierowanie użytkownika na stronę autoryzacji
          4. Wymiana tokenów i generowanie uwierzytelnionych żądań dotyczących prywatnych danych
      5. Narzędzia i wskazówki związane z diagnozowaniem problemów
        1. Brakujące lub powtarzające się parametry
        2. Dwukrotne kodowanie parametrów podpisu
        3. Nieprawidłowe punkty końcowe URI
        4. Nieprawidłowa metoda podpisywania żądań
        5. Utrata ważności przez token
    3. OAuth 2
      1. Przepływ pracy w standardzie OAuth 2
        1. Kroki 1. – 2.: klient żąda autoryzacji, dostawca przyznaje dostęp
        2. Kroki 3. – 4.: klient żąda tokenu dostępu, dostawca przyznaje token dostępu
        3. Kroki 5. – 6.: klient żąda chronionych zasobów, dostawca przyznaje dostęp do tych zasobów
        4. Opcjonalne kroki 7. – 8.: odświeżanie tokenu dostępu
      2. Przykład implementacji: Facebook
        1. Tworzenie aplikacji
        2. Implementacja standardu OAuth 2 w języku PHP
          1. Wspólne zmienne i funkcje
          2. Generowanie żądania autoryzacji
          3. Uzyskanie tokenu dostępu
          4. Generowanie podpisanych żądań
        3. Implementacja standardu OAuth 2 w języku Python
          1. Plik konfiguracyjny silnika aplikacji
          2. Moduły, wspólne zmienne i ścieżki
          3. Uzyskanie autoryzacji, pobranie tokenu dostępu i wysyłanie właściwych żądań
      3. Przykład implementacji: żądanie dodatkowych informacji na temat użytkownika w procesie autoryzacji OAuth w serwisie Facebook
        1. Uprawnienia dostępu do danych
        2. Uprawnienia publikacji
        3. Uprawnienia dostępu do stron
      4. Przykład implementacji: aplikacja z perspektywy użytkownika końcowego
      5. Wskazówki dotyczące diagnozowania problemów z żądaniami
        1. Weryfikacja danych żądania
        2. Śledzenie ważności tokenu dostępu
        3. Reagowanie na kody błędów
    4. Podsumowanie
  13. 10. Przyszłość serwisów społecznościowych: definiowanie obiektów społecznościowych za pośrednictwem rozproszonych frameworków sieciowych
    1. Czego nauczysz się w tym rozdziale?
    2. Protokół Open Graph — definiowanie stron internetowych jako obiektów społecznościowych
      1. Wzloty i upadki metadanych
      2. Działanie protokołu Open Graph
      3. Implementacja protokołu Open Graph
        1. Definiowanie metadanych strony
        2. Określanie danych geolokalizacyjnych
        3. Definiowanie danych kontaktowych
        4. Dołączanie danych wideo
        5. Dołączanie danych audio
        6. Definiowanie produktów za pomocą typów obiektów
      4. Rzeczywisty przykład: implementacja protokołu Open Graph w serwisie Facebook
        1. Kod języka znaczników
      5. Praktyczna implementacja: odczytywanie danych protokołu Open Graph ze źródła w internecie
        1. Implementacja w języku PHP: węzeł Open Graph
        2. Implementacja w języku Python: węzeł Open Graph
      6. Wady protokołu Open Graph
        1. Brak możliwości implementowania wielopoziomowych definicji odróżniających podobne obiekty
        2. Definicja strony kontra definicja obiektu
    3. Strumienie aktywności: standaryzacja aktywności społecznościowych
      1. Dlaczego warto zdefiniować standard dla aktywności?
      2. Implementacja standardu Activity Streams
      3. Typy obiektów
        1. Podstawowe typy obiektów
      4. Czasowniki
        1. Czasowniki ogólne
    4. WebFinger — rozszerzanie grafu powiązań społecznościowych na podstawie adresów poczty elektronicznej
      1. Od finger do WebFinger: geneza protokołu WebFinger
      2. Implementacja protokołu WebFinger
      3. Wady protokołu WebFinger
        1. Publiczne dane
        2. Różnice dzielące implementacje poszczególnych dostawców
    5. Protokół OExchange — budowanie grafu udostępniania treści społecznościowych
      1. Jak działa protokół OExchange?
      2. Zastosowania protokołu OExchange
      3. Implementacja protokołu OExchange
        1. 1. Dostawca usługi (cel) integruje narzędzia odkrywania i publikowania treści
        2. 2. Wydawca (źródło) wykonuje operację odkrywania po stronie dostawcy usługi
          1. Bezpośrednio — na podstawie pliku XRD
          2. Odkrywanie za pośrednictwem nazwy hosta
          3. Odkrywanie za pośrednictwem poszczególnych stron
        3. 3. Wydawca wysyła ofertę treści do dostawcy usługi
    6. Protokół PubSubHubbub: rozpowszechnianie treści
      1. Jak działa protokół PubSubHubbub?
        1. 1. Subskrybent odpytuje kanał wydawcy
        2. 2. Subskrybent żąda od huba subskrypcji aktualizacji publikowanych w kanale wydawcy
        3. 3. Hub weryfikuje subskrybenta i żądanie
        4. 4. Wydawca powiadamia hub o aktualizacjach treści
        5. 5. Hub udostępnia nową treść subskrybentom
      2. Zalety z perspektywy wydawców i subskrybentów
        1. Wydawca: brak konieczności cyklicznego odpytywania wielu źródeł
        2. Subskrybent: brak konieczności cyklicznego odpytywania wydawcy
        3. Wydawca i subskrybent: ta sama treść trafiająca do wielu subskrybentów
      3. Serwery hubów i usługi implementacji
      4. Biblioteki przepływu pracy
        1. Aplikacje klienckie subskrybentów
        2. Aplikacje klienckie wydawców
      5. Budowanie wydawcy w języku PHP
      6. Budowanie wydawcy w języku Python
      7. Budowanie subskrybenta w języku PHP
      8. Budowanie subskrybenta w języku Python
    7. Protokół Salmon: ujednolicenie stron konwersacji
      1. Działanie protokołu Salmon
        1. 1. Wydawca wysyła zaktualizowaną treść do subskrybenta
        2. 2. Subskrybent odsyła zaktualizowaną treść do wydawcy
        3. 3. Wydawca wysyła zaktualizowaną treść do wszystkich subskrybentów
      2. Budowanie rozwiązań na bazie protokołu PubSubHubbub
      3. Ochrona przed nadużyciami i spamem
      4. Przegląd implementacji
    8. Podsumowanie
  14. 11. Rozszerzanie grafu powiązań społecznościowych za pomocą standardu OpenID
    1. Standard OpenID
      1. Klucz do sukcesu — decentralizacja
      2. Udoskonalenia względem tradycyjnego logowania
      3. Dostęp do istniejącej bazy danych użytkowników i grafu powiązań społecznościowych
    2. Czy już teraz dysponuję implementacją standardu OpenID? Gdzie mam jej szukać?
    3. Procedura uwierzytelniania OpenID
      1. Krok 1.: żądanie logowania przy użyciu identyfikatora OpenID
      2. Krok 2.: operacja odkrywania w celu wyznaczenia adresu URL punktu końcowego
      3. Krok 3.: żądanie uwierzytelnienia użytkownika
      4. Krok 4.: udostępnienie stanu sukcesu lub niepowodzenia
    4. Dostawcy OpenID
    5. Omijanie problemów odkrywania domen w standardzie OpenID
    6. Rozszerzenia standardu OpenID
      1. Rozszerzenie Simple Registration
      2. Rozszerzenie Attribute Exchange
        1. Typy pól rozszerzenia Attribute Exchange: adresy
        2. Typy pól rozszerzenia Attribute Exchange: pozdrowienia audio i wideo
        3. Typy pól rozszerzenia Attribute Exchange: data urodzenia
        4. Typy pól rozszerzenia Attribute Exchange: poczta elektroniczna
        5. Typy pól rozszerzenia Attribute Exchange: obrazy
        6. Typy pól rozszerzenia Attribute Exchange: komunikatory
        7. Typy pól rozszerzenia Attribute Exchange: nazwisko
        8. Typy pól rozszerzenia Attribute Exchange: telefon
        9. Typy pól rozszerzenia Attribute Exchange: witryny internetowe
        10. Typy pól rozszerzenia Attribute Exchange: praca
        11. Typy pól rozszerzenia Attribute Exchange: pozostałe dane osobowe i preferencje użytkownika
      3. Rozszerzenie Provider Authentication Policy Extension
        1. Uwierzytelnianie odporne na podszywanie się pod uprawnione serwisy
        2. Uwierzytelnianie przy użyciu wielu elementów
        3. Uwierzytelnianie przy użyciu wielu elementów, w tym elementów fizycznych
        4. Poziomy pewności NIST
      4. Aktualnie tworzone rozszerzenia
        1. Propozycja grupy roboczej pracującej nad interfejsem użytkownika OpenID
        2. Wymiana kontraktów
        3. Rozszerzenie hybrydy standardów OpenID i OAuth
    7. Przykład implementacji: OpenID
      1. Implementacja standardu OpenID w języku PHP
        1. Formularz odkrywania
        2. Dołączane skrypty oraz wspólne funkcje i zmienne globalne
        3. Żądanie uwierzytelnienia
        4. Wywołanie zwrotne uwierzytelniania
          1. Sprawdzanie stanu uwierzytelniania OpenID
          2. Odczytywanie wartości zwróconych przez rozszerzenie Simple Registration
          3. Sprawdzanie stanów strategii rozszerzenia PAPE
          4. Odczytywanie wartości zwróconych przez rozszerzenie Attribute Exchange
      2. Implementacja standardu OpenID w języku Python
        1. Uzyskanie niezbędnej biblioteki standardu OpenID
        2. Plik z kodem języka znaczników
        3. Formularz odkrywania
        4. Żądanie uwierzytelnienia
          1. Odkrywanie identyfikatora OpenID i przygotowanie żądania
          2. Generowanie żądań rozszerzeń standardu OpenID
          3. Wyświetlanie formularza logowania
          4. Wyświetlanie komunikatów i uruchamianie programu
        5. Wywołanie zwrotne uwierzytelniania
          1. Kończenie uwierzytelniania
          2. Odczytywanie wartości zwróconych przez rozszerzenia standardu OpenID
          3. Wyświetlanie obiektów odpowiedzi
    8. Typowe błędy i techniki diagnostyczne
      1. Niezgodność adresu URL wywołań zwrotnych
      2. Brak możliwości odkrycia identyfikatora OpenID
    9. Podsumowanie
  15. 12. Uwierzytelnianie hybrydowe — wygoda użytkownika i pełen dostęp do profilu
    1. Rozszerzenie hybrydy standardów OpenID i OAuth
      1. Istniejące implementacje
    2. Kiedy należy używać standardu OpenID, a kiedy jego hybrydy ze standardem OAuth?
      1. Pytania, na które warto sobie odpowiedzieć przed wybraniem właściwego rozwiązania
        1. Czy wybrany dostawca obsługuje uwierzytelnianie hybrydowe? Gdzie można to sprawdzić?
        2. Jakie informacje o użytkowniku chcemy uzyskać?
      2. Zalety i wady: standardowa implementacja OpenID
      3. Zalety i wady: uwierzytelnianie hybrydowe
    3. Przebieg uwierzytelniania w modelu hybrydowym na bazie standardów OpenID i OAuth
      1. Kroki 1. i 2.: odkrywanie (pierwsze dwa kroki procedury OpenID)
      2. Krok 3.: akceptacja uprawnień przez użytkownika
      3. Krok 4.: przekazanie stanu akceptacji/odrzucenia żądania OpenID i parametrów rozszerzenia hybrydowego
      4. Krok 5.: wymiana wstępnie zaakceptowanego tokenu żądania na token dostępu
      5. Krok 6.: generowanie podpisanych żądań dostępu do chronionych danych użytkownika
    4. Przykład implementacji: OpenID, OAuth i Yahoo!
      1. Konfiguracja aplikacji: uzyskanie kluczy standardu OAuth na potrzeby procesu uwierzytelniania hybrydowego
      2. Implementacja uwierzytelniania hybrydowego w języku PHP
        1. Formularz odkrywania
        2. Dołączane skrypty oraz wspólne funkcje i zmienne globalne
        3. Żądanie uwierzytelnienia
        4. Wywołanie zwrotne uwierzytelniania
          1. Kończenie procesu uwierzytelniania OpenID
          2. Weryfikacja odpowiedzi dostawcy OpenID i przetwarzanie danych rozszerzenia Attribute Exchange
          3. Wymiana wstępnie zaakceptowanego tokenu żądania OpenID na token dostępu OAuth
          4. Wysyłanie żądań z użyciem tokenu dostępu OAuth
      3. Implementacja uwierzytelniania hybrydowego w języku Python
        1. Wymagane biblioteki
          1. OpenID
          2. OAuth
        2. Plik z kodem języka znaczników
        3. Formularz żądania
        4. Wspólne zmienne
        5. Żądanie uwierzytelnienia
          1. Operacja odkrywania i budowanie obiektu konsumenta OpenID
          2. Dołączanie rozszerzeń i parametrów uwierzytelniania hybrydowego OAuth
          3. Funkcje pomocnicze i inicjalizacja
        6. Wywołanie zwrotne uwierzytelniania
          1. Uzyskanie obiektów odpowiedzi i przygotowanie obiektu żądania konsumenta OpenID
          2. Kończenie procesu uwierzytelniania OpenID i wyodrębnianie danych
          3. Sprawdzanie statusu OpenID i uzyskanie tokenu dostępu
          4. Generowanie podpisanych żądań dotyczących chronionych zasobów użytkownika
    5. Podsumowanie
  16. A. Podstawowe zagadnienia związane z budową aplikacji internetowych
    1. Krótki przegląd standardów open source
      1. Jakie są zalety i wady stosowania standardów open source?
        1. Zalety
        2. Wady
      2. Czy standardy open source rozwiązują wszystkie problemy?
    2. Interfejsy API usług sieciowych
    3. Kody statusu odpowiedzi protokołu HTTP
    4. Zasada tego samego pochodzenia
      1. Jak jest określane pochodzenie?
      2. Omijanie wymagań zasady tego samego pochodzenia
    5. Żądania architektury REST
      1. Żądanie GET
      2. Żądanie POST
      3. Żądanie PUT
      4. Żądanie DELETE
      5. Żądanie HEAD
    6. Mikroformaty i sieć semantyczna
    7. Instalacja systemu Subversion (SVN)
      1. Instalacja w systemie Mac OS X
      2. Instalacja w systemie Windows
    8. Instalacja serwera HTTP Apache
      1. Instalacja w systemie Mac OS X
      2. Instalacja w systemie Windows
    9. Konfiguracja środowiska PHP
      1. Instalacja w systemie Mac OS X
      2. Instalacja w systemie Windows
    10. Konfiguracja środowiska języka Python
  17. B. Słownik pojęć
  18. C. O autorze
  19. Indeks
  20. Kolofon
  21. Copyright