[ Pobierz całość w formacie PDF ]
4.
i18n, L10n i Unicode........................................................................................................93
Umiędzynarodowienie i lokalizacja oprogramowania
94
Unicode w pigułce
98
Schemat kodowania UTF-8
104
Schemat kodowania UTF-8 w aplikacjach internetowych
105
Stosowanie schematu kodowania UTF-8 w języku PHP
107
Stosowanie schematu kodowania UTF-8 w pozostałych językach programowania
108
Stosowanie schematu kodowania UTF-8 w bazach danych MySQL
109
Stosowanie schematu kodowania UTF-8 w wiadomościach poczty elektronicznej
111
Stosowanie schematu kodowania UTF-8 w skryptach języka JavaScript
113
Stosowanie schematu kodowania UTF-8 w interfejsach API
115
5.
Integralność danych i bezpieczeństwo ....................................................................... 117
Strategie zapewniania integralności danych
117
Dobre, prawidłowe i nieprawidłowe
119
Filtrowanie sekwencji UTF-8
120
Filtrowanie znaków sterujących
126
Filtrowanie kodu HTML
127
Ataki XSS
131
Wstrzykiwanie kodu języka SQL
140
6.
Poczta elektroniczna ................................................................................................... 147
Otrzymywanie wiadomości poczty elektronicznej
147
Ryzyko wstrzykiwania wiadomości poczty elektronicznej do naszej aplikacji
150
Format MIME
152
Analiza składniowa prostych wiadomości MIME
154
Analiza składniowa załączników zakodowanych w trybie UU
156
Załączniki w formacie TNEF
157
Dlaczego technologie bezprzewodowe nie lubią programistów?
159
Zbiory znaków i schematy kodowania
162
Rozpoznawanie użytkowników
164
Testy jednostkowe
167
7.
Usługi zdalne................................................................................................................ 169
Klub usług zdalnych
169
Gniazda
170
Stosowanie protokołu HTTP
173
Nadmiarowość usług zdalnych
179
Systemy asynchroniczne
182
Wymiana danych w formacie XML
187
Lekkie protokoły
192
4
|
Spis treści
8.
Wąskie gardła .............................................................................................................. 197
Identyfikowanie wąskich gardeł
197
Operacje wejścia-wyjścia
212
Usługi zewnętrzne i czarne skrzynki
225
9.
Skalowanie aplikacji internetowych .......................................................................... 241
Mit skalowania
241
Skalowanie sieci
253
Równoważenie obciążeń
256
Skalowanie bazy danych MySQL
272
Replikacja baz danych MySQL
278
Partycjonowanie bazy danych
287
Skalowanie wielkich baz danych
292
Skalowanie pamięci masowej
294
Pamięć podręczna
302
Skalowanie w pigułce
305
10.
Statystyki, monitorowanie i wykrywanie usterek ....................................................307
Śledzenie statystyk aplikacji internetowej
307
Monitorowanie aplikacji
318
Alarmowanie
336
11.
Interfejsy API................................................................................................................339
Kanały danych
339
Technologie mobilne
352
Usługi sieciowe
356
Warstwy transportowe interfejsów API
359
Nadużywanie interfejsów API
367
Uwierzytelnianie
371
Przyszłość
375
Skorowidz .................................................................................................................... 377
Spis treści
|
5
ROZDZIAŁ 1.
Wprowadzenie
Zanim przystąpimy do projektowania i kodowania naszych przykładów, musimy zrobić krok
wstecz i zdefiniować najważniejsze terminy. Warto się zastanowić, jaki jest cel naszych rozważań
i czym ten cel się różni od tego, co robiliśmy do tej pory. Czytelnicy, którzy budowali już jakieś
aplikacje internetowe, mogą pominąć kolejny rozdział, ponieważ prezentowany tam materiał
będzie obejmował wiedzę podstawową. Z drugiej strony, czytelnicy zainteresowani ogólnym
kontekstem naszych rozważań koniecznie powinni się zapoznać także ze wspomnianym roz-
działem 2.
Czym jest aplikacja internetowa?
Większość czytelników tej książki najprawdopodobniej doskonale zdaje sobie sprawę z tego,
czym jest aplikacja internetowa, co wcale nie oznacza, że próba precyzyjnego zdefiniowania
tego terminu jest bezcelowa, ponieważ etykieta aplikacji internetowej bardzo często jest przypi-
sywana różnym rozwiązaniom w sposób błędy. Aplikacja internetowa nie jest ani witryną
internetową, ani aplikacją w rozumieniu typowego użytkownika systemu operacyjnego.
Aplikacja internetowa plasuje się gdzieś pomiędzy tymi dwoma rozwiązaniami i me pewne
cechy zarówno witryny internetowej, jak i autonomicznej aplikacji.
O ile witryna internetowa zawiera strony z danymi, o tyle aplikacja internetowa składa się
zarówno z danych, jak i odrębnego mechanizmu ich dostarczania do przeglądarki. Podobnie
jak entuzjaści dużej dostępności witryn internetowych zachwycają się możliwością oddzielania
znaczników od stylów za pomocą plików CSS, również projektanci aplikacji internetowych
szczycą się możliwością faktycznego oddzielania danych od warstwy prezentacji — dane aplikacji
internetowej nie mają nic wspólnego ze znacznikami (choć same mogą tego rodzaju elementy
zawierać). Komunikaty składające się na komponent aplikacji internetowej są odseparowane
od znaczników. Oznacza to, że w razie konieczności wyświetlenia tych danych użytkownikowi
należy wyodrębnić odpowiednie komunikaty z miejsca ich składowania (najczęściej z bazy
danych), po czym dostarczyć użytkownikowi w określonym formacie i za pośrednictwem jakie-
goś medium (najczęściej w formacie HTML i za pośrednictwem protokołu HTTP). Najciekawsze
jest jednak to, że
nie musimy
dostarczać danych w formacie HTML — równie dobrze mogli-
byśmy je wysyłać w pliku PDF za pośrednictwem np. poczty elektronicznej.
Aplikacje internetowe nie zawierają stron w rozumieniu znanym z witryn internetowych, które
z natury rzeczy składają się ze stron internetowych. O ile aplikacja internetowa może prezentować
swoje dane np. za pośrednictwem dziesięciu stron internetowych, dodawanie kolejnych danych
15
może zwiększyć tę liczbę bez konieczności tworzenia nowych szablonów języka HTML ani
dopisywania kodu źródłowego samej aplikacji. Ponieważ aplikacja internetowa może oferować
takie funkcje jak przeszukiwanie (na podstawie słów wpisywanych przez użytkowników),
liczba generowanych „stron internetowych” w praktyce może być nieograniczona, co oczywiście
nie oznacza, że musimy w nieskończoność dopisywać niezbędny kod HTML-a. Stosunkowo
niewielki zbiór szablonów i logika generowania dynamicznej zawartości pozwala nam na
tworzenie niezbędnych stron na bieżąco, w odpowiedzi na takie parametry wejściowe jak adresy
URL czy dane przekazywane w trybie POST.
Z perspektywy przeciętnego użytkownika aplikacja internetowa może się niczym nie różnić
od witryny internetowej. Nawet analizując kod wyświetlanych stron internetowych trudno
stwierdzić, czy były one generowane w sposób dynamiczny na podstawie danych składowanych
np. w bazie danych, czy miały postać statycznych dokumentów HTML-a. Pewną wskazówką
może być rozszerzenie pliku, co wcale nie oznacza, że nie można tego rozszerzenia sfałszować
(w jedną lub drugą stronę). Aplikacja internetowa ujawnia swój prawdziwy charakter tylko
tym użytkownikom, którzy modyfikują jej dane. Z reguły (choć nie zawsze) do takiej edycji
wykorzystuje się interfejs HTML, ale równie dobrze można sobie wyobrazić autonomiczną
aplikację zaprojektowaną z myślą o bezpośredniej lub zdalnej edycji tych danych.
Wraz z wprowadzeniem technologii AJAX (od ang.
Asynchronous JavaScript and XML
), znanej
wcześniej jako zdalne wykonywanie skryptów (ang.
remote scripting
), znacznie rozbudowano
model interakcji z aplikacjami internetowymi. W przeszłości interakcja użytkowników z aplika-
cjami internetowymi odbywała się wyłącznie za pośrednictwem stron internetowych. Użyt-
kownik żąda od serwera zwrócenia strony internetowej, wprowadza i wysyła zmiany za pośred-
nictwem żądania POST protokołu HTTP i otrzymuje w odpowiedzi nową stronę potwierdzającą
dokonanie zmian lub prezentującą zmodyfikowane dane. Model AJAX umożliwia nam wysyłanie
modyfikacji danych w tle (bez konieczności ponownego wyświetlania strony w przeglądarce
użytkownika), co zbliża aplikacje internetowe do modelu interakcji znanego z aplikacji auto-
nomicznych.
Charakter aplikacji internetowych zmienia się dość powoli. Nie można oczywiście ignorować
daleko idących różnic, które dzielą współczesne aplikacje internetowe od aplikacji implemento-
wanych jeszcze kilka lat temu, jednak rozwoju tego rodzaju aplikacji w żadnym razie nie sposób
uznać za zakończony. Projekty Gmail firmy Google i Office Live firmy Microsoft pokazują, że
rynek aplikacji internetowych ewoluuje w kierunku produktów dostarczanych za pośrednictwem
internetu, które łączą w sobie najlepsze cechy rozwiązań autonomicznych i internetowych.
O ile tradycyjne aplikacje biurowe oferują bogate możliwości w zakresie interakcji i dużą
efektywność (w szczególności krótkie czasy odpowiedzi), o tyle aplikacje internetowe mogą
zapewniać swoim użytkownikom bezproblemowe i niezauważalne aktualizacje, naprawdę
przenośne dane i mniejsze wymagania sprzętowe po stronie klienta. Niezależnie od stosowanego
modelu interakcji z użytkownikiem, jeden aspekt pozostaje niezmienny — aplikacje internetowe
są systemami, których dostęp do podstawowych danych uzyskujemy za pośrednictwem stron
internetowych (z reguły strony internetowe umożliwiają także modyfikowanie tych danych),
a pozostałe interfejsy mają raczej charakter uzupełniający.
Jak budujemy aplikacje internetowe?
Budowa aplikacji internetowej wymaga przygotowania co najmniej dwóch głównych kompo-
nentów: platformy sprzętowej i platformy programowej. W przypadku małych, prostych
aplikacji platforma sprzętowa może się składać z pojedynczego serwera, na którym działa
16
|
Rozdział 1. Wprowadzenie
[ Pobierz całość w formacie PDF ]
zanotowane.pl doc.pisz.pl pdf.pisz.pl adbuxwork.keep.pl
4.
i18n, L10n i Unicode........................................................................................................93
Umiędzynarodowienie i lokalizacja oprogramowania
94
Unicode w pigułce
98
Schemat kodowania UTF-8
104
Schemat kodowania UTF-8 w aplikacjach internetowych
105
Stosowanie schematu kodowania UTF-8 w języku PHP
107
Stosowanie schematu kodowania UTF-8 w pozostałych językach programowania
108
Stosowanie schematu kodowania UTF-8 w bazach danych MySQL
109
Stosowanie schematu kodowania UTF-8 w wiadomościach poczty elektronicznej
111
Stosowanie schematu kodowania UTF-8 w skryptach języka JavaScript
113
Stosowanie schematu kodowania UTF-8 w interfejsach API
115
5.
Integralność danych i bezpieczeństwo ....................................................................... 117
Strategie zapewniania integralności danych
117
Dobre, prawidłowe i nieprawidłowe
119
Filtrowanie sekwencji UTF-8
120
Filtrowanie znaków sterujących
126
Filtrowanie kodu HTML
127
Ataki XSS
131
Wstrzykiwanie kodu języka SQL
140
6.
Poczta elektroniczna ................................................................................................... 147
Otrzymywanie wiadomości poczty elektronicznej
147
Ryzyko wstrzykiwania wiadomości poczty elektronicznej do naszej aplikacji
150
Format MIME
152
Analiza składniowa prostych wiadomości MIME
154
Analiza składniowa załączników zakodowanych w trybie UU
156
Załączniki w formacie TNEF
157
Dlaczego technologie bezprzewodowe nie lubią programistów?
159
Zbiory znaków i schematy kodowania
162
Rozpoznawanie użytkowników
164
Testy jednostkowe
167
7.
Usługi zdalne................................................................................................................ 169
Klub usług zdalnych
169
Gniazda
170
Stosowanie protokołu HTTP
173
Nadmiarowość usług zdalnych
179
Systemy asynchroniczne
182
Wymiana danych w formacie XML
187
Lekkie protokoły
192
4
|
Spis treści
8.
Wąskie gardła .............................................................................................................. 197
Identyfikowanie wąskich gardeł
197
Operacje wejścia-wyjścia
212
Usługi zewnętrzne i czarne skrzynki
225
9.
Skalowanie aplikacji internetowych .......................................................................... 241
Mit skalowania
241
Skalowanie sieci
253
Równoważenie obciążeń
256
Skalowanie bazy danych MySQL
272
Replikacja baz danych MySQL
278
Partycjonowanie bazy danych
287
Skalowanie wielkich baz danych
292
Skalowanie pamięci masowej
294
Pamięć podręczna
302
Skalowanie w pigułce
305
10.
Statystyki, monitorowanie i wykrywanie usterek ....................................................307
Śledzenie statystyk aplikacji internetowej
307
Monitorowanie aplikacji
318
Alarmowanie
336
11.
Interfejsy API................................................................................................................339
Kanały danych
339
Technologie mobilne
352
Usługi sieciowe
356
Warstwy transportowe interfejsów API
359
Nadużywanie interfejsów API
367
Uwierzytelnianie
371
Przyszłość
375
Skorowidz .................................................................................................................... 377
Spis treści
|
5
ROZDZIAŁ 1.
Wprowadzenie
Zanim przystąpimy do projektowania i kodowania naszych przykładów, musimy zrobić krok
wstecz i zdefiniować najważniejsze terminy. Warto się zastanowić, jaki jest cel naszych rozważań
i czym ten cel się różni od tego, co robiliśmy do tej pory. Czytelnicy, którzy budowali już jakieś
aplikacje internetowe, mogą pominąć kolejny rozdział, ponieważ prezentowany tam materiał
będzie obejmował wiedzę podstawową. Z drugiej strony, czytelnicy zainteresowani ogólnym
kontekstem naszych rozważań koniecznie powinni się zapoznać także ze wspomnianym roz-
działem 2.
Czym jest aplikacja internetowa?
Większość czytelników tej książki najprawdopodobniej doskonale zdaje sobie sprawę z tego,
czym jest aplikacja internetowa, co wcale nie oznacza, że próba precyzyjnego zdefiniowania
tego terminu jest bezcelowa, ponieważ etykieta aplikacji internetowej bardzo często jest przypi-
sywana różnym rozwiązaniom w sposób błędy. Aplikacja internetowa nie jest ani witryną
internetową, ani aplikacją w rozumieniu typowego użytkownika systemu operacyjnego.
Aplikacja internetowa plasuje się gdzieś pomiędzy tymi dwoma rozwiązaniami i me pewne
cechy zarówno witryny internetowej, jak i autonomicznej aplikacji.
O ile witryna internetowa zawiera strony z danymi, o tyle aplikacja internetowa składa się
zarówno z danych, jak i odrębnego mechanizmu ich dostarczania do przeglądarki. Podobnie
jak entuzjaści dużej dostępności witryn internetowych zachwycają się możliwością oddzielania
znaczników od stylów za pomocą plików CSS, również projektanci aplikacji internetowych
szczycą się możliwością faktycznego oddzielania danych od warstwy prezentacji — dane aplikacji
internetowej nie mają nic wspólnego ze znacznikami (choć same mogą tego rodzaju elementy
zawierać). Komunikaty składające się na komponent aplikacji internetowej są odseparowane
od znaczników. Oznacza to, że w razie konieczności wyświetlenia tych danych użytkownikowi
należy wyodrębnić odpowiednie komunikaty z miejsca ich składowania (najczęściej z bazy
danych), po czym dostarczyć użytkownikowi w określonym formacie i za pośrednictwem jakie-
goś medium (najczęściej w formacie HTML i za pośrednictwem protokołu HTTP). Najciekawsze
jest jednak to, że
nie musimy
dostarczać danych w formacie HTML — równie dobrze mogli-
byśmy je wysyłać w pliku PDF za pośrednictwem np. poczty elektronicznej.
Aplikacje internetowe nie zawierają stron w rozumieniu znanym z witryn internetowych, które
z natury rzeczy składają się ze stron internetowych. O ile aplikacja internetowa może prezentować
swoje dane np. za pośrednictwem dziesięciu stron internetowych, dodawanie kolejnych danych
15
może zwiększyć tę liczbę bez konieczności tworzenia nowych szablonów języka HTML ani
dopisywania kodu źródłowego samej aplikacji. Ponieważ aplikacja internetowa może oferować
takie funkcje jak przeszukiwanie (na podstawie słów wpisywanych przez użytkowników),
liczba generowanych „stron internetowych” w praktyce może być nieograniczona, co oczywiście
nie oznacza, że musimy w nieskończoność dopisywać niezbędny kod HTML-a. Stosunkowo
niewielki zbiór szablonów i logika generowania dynamicznej zawartości pozwala nam na
tworzenie niezbędnych stron na bieżąco, w odpowiedzi na takie parametry wejściowe jak adresy
URL czy dane przekazywane w trybie POST.
Z perspektywy przeciętnego użytkownika aplikacja internetowa może się niczym nie różnić
od witryny internetowej. Nawet analizując kod wyświetlanych stron internetowych trudno
stwierdzić, czy były one generowane w sposób dynamiczny na podstawie danych składowanych
np. w bazie danych, czy miały postać statycznych dokumentów HTML-a. Pewną wskazówką
może być rozszerzenie pliku, co wcale nie oznacza, że nie można tego rozszerzenia sfałszować
(w jedną lub drugą stronę). Aplikacja internetowa ujawnia swój prawdziwy charakter tylko
tym użytkownikom, którzy modyfikują jej dane. Z reguły (choć nie zawsze) do takiej edycji
wykorzystuje się interfejs HTML, ale równie dobrze można sobie wyobrazić autonomiczną
aplikację zaprojektowaną z myślą o bezpośredniej lub zdalnej edycji tych danych.
Wraz z wprowadzeniem technologii AJAX (od ang.
Asynchronous JavaScript and XML
), znanej
wcześniej jako zdalne wykonywanie skryptów (ang.
remote scripting
), znacznie rozbudowano
model interakcji z aplikacjami internetowymi. W przeszłości interakcja użytkowników z aplika-
cjami internetowymi odbywała się wyłącznie za pośrednictwem stron internetowych. Użyt-
kownik żąda od serwera zwrócenia strony internetowej, wprowadza i wysyła zmiany za pośred-
nictwem żądania POST protokołu HTTP i otrzymuje w odpowiedzi nową stronę potwierdzającą
dokonanie zmian lub prezentującą zmodyfikowane dane. Model AJAX umożliwia nam wysyłanie
modyfikacji danych w tle (bez konieczności ponownego wyświetlania strony w przeglądarce
użytkownika), co zbliża aplikacje internetowe do modelu interakcji znanego z aplikacji auto-
nomicznych.
Charakter aplikacji internetowych zmienia się dość powoli. Nie można oczywiście ignorować
daleko idących różnic, które dzielą współczesne aplikacje internetowe od aplikacji implemento-
wanych jeszcze kilka lat temu, jednak rozwoju tego rodzaju aplikacji w żadnym razie nie sposób
uznać za zakończony. Projekty Gmail firmy Google i Office Live firmy Microsoft pokazują, że
rynek aplikacji internetowych ewoluuje w kierunku produktów dostarczanych za pośrednictwem
internetu, które łączą w sobie najlepsze cechy rozwiązań autonomicznych i internetowych.
O ile tradycyjne aplikacje biurowe oferują bogate możliwości w zakresie interakcji i dużą
efektywność (w szczególności krótkie czasy odpowiedzi), o tyle aplikacje internetowe mogą
zapewniać swoim użytkownikom bezproblemowe i niezauważalne aktualizacje, naprawdę
przenośne dane i mniejsze wymagania sprzętowe po stronie klienta. Niezależnie od stosowanego
modelu interakcji z użytkownikiem, jeden aspekt pozostaje niezmienny — aplikacje internetowe
są systemami, których dostęp do podstawowych danych uzyskujemy za pośrednictwem stron
internetowych (z reguły strony internetowe umożliwiają także modyfikowanie tych danych),
a pozostałe interfejsy mają raczej charakter uzupełniający.
Jak budujemy aplikacje internetowe?
Budowa aplikacji internetowej wymaga przygotowania co najmniej dwóch głównych kompo-
nentów: platformy sprzętowej i platformy programowej. W przypadku małych, prostych
aplikacji platforma sprzętowa może się składać z pojedynczego serwera, na którym działa
16
|
Rozdział 1. Wprowadzenie
[ Pobierz całość w formacie PDF ]