Przykłady zastosowań na jednej stronie. Aplikacja jednostronicowa lub jednostronicowa aplikacja internetowa
Romana Lipskiego
Świat oprogramowania rozwija się obecnie z ogromną szybkością. Jeszcze kilka lat temu głównymi urządzeniami do tworzenia stron internetowych były komputery stacjonarne i laptopy. Dziś sytuacja wcale tak nie wygląda.
Uniwersalne aplikacje internetowe zastępują przestarzałe aplikacje desktopowe w wielu obszarach biznesu. Dlaczego? Ponieważ zachowują funkcjonalność na wszystkich urządzeniach, działają w chmurze i są ogólnie znacznie wygodniejsze w użyciu.
Niektórzy uważają, że aplikacje internetowe oparte na przeglądarce są stopniowo zastępowane przez aplikacje mobilne, które mają ogromną bazę klientów. Ale prawda jest taka, że aplikacje internetowe żyją bardziej niż kiedykolwiek, a popyt na nie tylko rośnie.
Jeśli zastanawiasz się nad stworzeniem aplikacji internetowej dla swojej firmy, prawdopodobnie już wiesz, że istnieją dwa główne podejścia do rozwoju: możesz tworzyć zarówno aplikacje jednostronicowe (SPA), jak i aplikacje wielostronicowe (MPA).
Jak wszystko w naszym życiu, obie opcje projektowania mają swoje zalety i wady. Zanim zaczniesz wdrażać swoje pomysły, musisz podjąć kilka ważnych decyzji.
Aby zdecydować, który model aplikacji internetowej jest najlepszy dla Twojej firmy, zawsze skupiaj się na treściach, które Twoi klienci cenią najbardziej, ponieważ bez treści po prostu nie będziesz w stanie przyciągnąć klientów do korzystania z Twoich produktów internetowych.
Dlatego najważniejsze pytania na pierwszym etapie to, jaki rodzaj treści chcesz promować wśród docelowych odbiorców i co jest dla nich najważniejsze, aby z Tobą współpracować.
Jak wspomnieliśmy powyżej, zarówno SPA, jak i MPA mają swoje wady i zalety. Rozumiemy różnicę między tymi dwoma typami aplikacji i spróbujmy znaleźć odpowiednie rozwiązanie do tworzenia stron internetowych dla Twojej firmy.
W tym celu poprosimy dyrektora działu internetowego BLAKIT, Witalija Ozerskiego, o przedstawienie swoich eksperckich komentarzy na ten temat. Mamy nadzieję, że wspólnie ułatwimy Państwu ten wybór.
Aplikacje jednostronicoweAplikacje jednostronicowe działają w przeglądarce i nie wymagają ponownego ładowania stron ani ładowania dodatkowych stron podczas użytkowania. Z takich aplikacji codziennie korzystają miliony użytkowników, nawet tego nie zauważając. Najpopularniejsze przykłady: GitHub, Gmail, Google Maps, a nawet Facebook.
Witalij Ozerski: aplikacje jednostronicowe z reguły są maksymalnie interaktywne, do tego stopnia, że użytkownik ma wrażenie, że pracuje z aplikacją desktopową: reakcja aplikacji na działania użytkownika jest w większości przypadków natychmiastowa. W ten sposób SPA wypadają korzystnie w porównaniu z witrynami wielostronicowymi, gdzie przy każdej akcji użytkownik musi czekać na załadowanie nowej strony.
Aplikacje jednostronicowe zostały zaprojektowane specjalnie w celu zapewnienia użytkownikom doskonałego UX, który przypomina „naturalne” środowisko przeglądarki, bez konieczności przeładowywania stron, a tym samym bez opóźnień w wykonywaniu działań.
Typowa aplikacja jednostronicowa wygląda jak strona internetowa, która ładuje i aktualizuje zawartość bez ponownego ładowania przy użyciu JavaScript. SPA żąda układu i treści strony, a następnie tworzy ostateczny widok strony bezpośrednio w przeglądarce. Efekt ten można osiągnąć dzięki zaawansowanym frameworkom JavaScript takim jak AngularJS, Ember.js, Meteor.js, Knockout.js.
W: Oprócz głównych popularnych frameworków programiści BLAKIT mogą także tworzyć aplikacje jednostronicowe przy użyciu ReactJS.
Główną zaletą React jest niski próg wejścia. React jest dość łatwy w użyciu; Prawie każdy programista znający HTML może tworzyć aplikacje React.
Kolejną zaletą jest możliwość pisania aplikacji na platformy webowe i mobilne przy wykorzystaniu jednego stosu technologicznego.
Korzystamy z React wraz z biblioteką Redux, co pozwala nam rozplanować odpowiednią architekturę i stworzyć złożone aplikacje internetowe, które są łatwe w skalowaniu.
Z punktu widzenia zwykłego użytkownika główną zaletą UX aplikacji typu single page jest to, że cała treść jest prezentowana w przystępny i funkcjonalny sposób, bez konieczności przeskakiwania ze strony na stronę.
Zalety aplikacji jednostronicowych:- SPA charakteryzują się doskonałą wydajnością, gdyż większość wykorzystywanych przez nie zasobów (HTML + CSS + Skrypty) ładuje się tylko raz podczas sesji korzystania z aplikacji. Po wykonaniu czynności na stronie zmieniają się jedynie dane.
- Tworzenie aplikacji internetowych jest zazwyczaj szybsze i wydajniejsze. Nie ma potrzeby pisania osobnego kodu, aby wyrenderować stronę po stronie serwera. Dużo łatwiej jest także rozpocząć tworzenie takich aplikacji, ponieważ pisanie kodu można rozpocząć od pliku:://URI, bez konieczności korzystania z jakiegokolwiek serwera.
- SPA są zoptymalizowane pod kątem debugowania Chrome, umożliwiając programistom śledzenie aktywności sieciowej oraz sprawdzanie elementów strony i powiązanych z nimi danych.
- Jeśli posiadasz już SPA, będziesz mógł stworzyć aplikację mobilną z tym samym backendem.
- SPA są bardziej wydajne w buforowaniu danych na nośnikach lokalnych. Aplikacja wysyła jedno żądanie, zbiera wszystkie niezbędne dane i od tego momentu może pracować nawet offline.
- Optymalizacja SEO dla aplikacji typu single page z oczywistych powodów nie jest zbyt łatwa. Treść aplikacji ładowana jest przy użyciu AJAX (Asynchronous JavaScript and XML), metody wymiany danych i aktualizacji aplikacji bez ponownego ładowania strony, natomiast optymalizacja SEO opiera się na trwałości treści na każdej pojedynczej stronie. Jednak wypromowanie Twojej strony w wyszukiwarkach nie jest niemożliwe. Wiele zmian w SEO można wprowadzić po stronie serwera, a firmy takie jak Google wciąż wymyślają nowe rozwiązania, aby ułatwić życie zarówno właścicielom spa, jak i ich użytkownikom.
- Ładowanie zajmuje dość dużo czasu, ponieważ ciężkie frameworki po stronie klienta muszą najpierw zostać załadowane do przeglądarki.
- SPA wymagają, aby JavaScript był aktywny w przeglądarkach użytkowników. Jeśli któryś z Twoich klientów ręcznie wyłączy JavaScript, nie będzie mógł w pełni korzystać z Twojej aplikacji. Nawet jeśli buforujesz i renderujesz swoje strony po stronie serwera (co jest teraz możliwe), nadal istnieje ryzyko, że nie dostarczysz wszystkich funkcji aplikacji jednostronicowej w prawidłowej formie użytkownikom nie korzystającym z JS.
- W porównaniu do tradycyjnych aplikacji, SPA są nieco mniej bezpieczne. Dzięki skryptom krzyżowym (XSS) atakujący mogą wstrzyknąć dodatkowe skrypty po stronie klienta.
- Niektóre wycieki pamięci JavaScript mogą powodować pogorszenie wydajności nawet w wydajnych systemach
Warto także wiedzieć, że wszystkie problemy związane z użytkowaniem aplikacji typu single page są stopniowo rozwiązywane, gdyż wiele firm, w tym korporacji technologicznych, zachęca do tej formy relacji z klientami w Internecie.
W: SPA są odpowiednie dla każdej firmy, która potrzebuje automatyzacji swoich procesów. Jednak w przypadku np. witryn korporacyjnych i katalogów internetowych lepiej jest korzystać z bardziej tradycyjnych witryn.
Aplikacje wielostronicoweAplikacje wielostronicowe działają, że tak powiem, w bardziej tradycyjny sposób. Każda istotna zmiana danych lub przesłanie informacji z powrotem na serwer powoduje wyświetlenie nowej strony w przeglądarce. Aplikacje wielostronicowe są oczywiście cięższe niż aplikacje jednostronicowe i zazwyczaj mają na celu wyświetlanie większej ilości treści.
Złożoność i koszt opracowania MPA są wyższe i wymagają również wielowarstwowego projektu interfejsu użytkownika. Na szczęście nie jest to już tak duży problem, ponieważ AJAX pozwala na aktualizację tylko niektórych części aplikacji, zamiast przesyłać masę danych pomiędzy serwerami i przeglądarkami.
Zalety aplikacji wielostronicowych:- Jest to najbardziej odpowiednia opcja dla użytkowników, którzy chcą bardziej przejrzystego wizualnie interfejsu i znanej nawigacji po aplikacji. MPA są zwykle tworzone z wielopoziomowymi menu i innymi narzędziami nawigacyjnymi.
- Znacząco uproszczone SEO. Możesz zoptymalizować każdą stronę aplikacji pod kątem potrzebnych słów kluczowych.
- Rozwój frontendu i backendu w tym przypadku są bardzo ściśle ze sobą powiązane.
- Rozwój MPA jest dość złożony, ponieważ wymaga użycia frameworków zarówno po stronie klienta, jak i serwera. Odpowiednio czas i koszty rozwoju nie są dla wielu firm tak przyjemne.
Zanim podejmiesz decyzję o stworzeniu aplikacji internetowej, musisz najpierw mieć na uwadze cel jej powstania. Jeśli w biznesie masz do czynienia z dużą liczbą różnych towarów i usług, wielostronicowy serwis internetowy będzie dla Ciebie optymalnym rozwiązaniem.
Jeśli szukasz maksymalnej funkcjonalności w skondensowanej przestrzeni internetowej, jednostronicowa aplikacja internetowa jest właściwym wyborem. A jeśli funkcjonalność SPA odpowiada Twoim potrzebom, ale nie możesz sobie wyobrazić, jak zmieścić całą treść na jednej stronie, warto rozważyć witrynę hybrydową.
Nie wspominaliśmy jeszcze o tej formie tworzenia stron internetowych w artykule. Aplikacja hybrydowa ma na celu wykorzystanie tego, co najlepsze z obu światów, jednocześnie minimalizując wady.
Technicznie rzecz biorąc, aplikacja hybrydowa to nadal SPA, ale wykorzystuje kotwice adresów URL jako strony syntetyczne, poprawiając w ten sposób natywną nawigację i funkcjonalność ustawień przeglądarki.
Daj nam znać, jeśli chcesz dowiedzieć się więcej o aplikacjach hybrydowych, napiszemy o nich osobny artykuł.
Obecnie uważa się, że w najbliższej przyszłości prawie wszystkie firmy przejdą na model aplikacji jednostronicowy lub hybrydowy, ponieważ taka architektura ma więcej zalet zarówno dla programistów, jak i użytkowników.
Z naszych danych wynika, że wiele rodzajów przedsiębiorstw już w swojej strategii promocji w Internecie przechodzi na ten model. Jednak niektórych typów projektów po prostu nie da się wdrożyć jako SPA: po prostu zawierają za dużo treści. Dlatego przynajmniej w najbliższej przyszłości model MPA nadal ma swoje miejsce.
W: Całkowicie zgadzam się ze stwierdzeniem o rosnącej popularności aplikacji jednostronicowych. W dzisiejszych czasach aplikacje SPA cieszą się dużym zainteresowaniem, gdyż firmy stopniowo przenoszą swoje oprogramowanie z aplikacji desktopowych do aplikacji dostępnych z dowolnej przeglądarki, a nie tylko na komputerze PC z systemem Windows.
Aplikacje internetowe w chmurze zyskują na popularności. Wiele firm IT dostrzega ten trend i coraz więcej oprogramowania powstaje w oparciu o zdalny dostęp. Istnieje wiele podobnych programów komputerowych, które oferują wersję online za niewielką miesięczną opłatą.
Zapewniają większą elastyczność i mobilność. Przykładowo, dane do chmurowych systemów CRM czy ERP możesz łatwo wprowadzić za pomocą telefonu komórkowego i może to nastąpić w dogodnym dla Ciebie miejscu. Jak widać z wykresu Statisty, rynek rozwiązań chmurowych rośnie i do 2026 roku ma osiągnąć prawie 522 miliardy dolarów.
Aby zapewnić stabilne działanie skomplikowanych aplikacji internetowych, wskazane jest stosowanie technologii, które zapewnią najlepszą wydajność i szybkość. Istnieją dwa sposoby tworzenia aplikacji internetowych: aplikacje jednostronicowe (SPA) i aplikacje wielostronicowe (MPA). Przyjrzyjmy się różnicy między nimi i jakie zalety ma każdy typ aplikacji internetowej.
Single Page Applications pozwalają symulować pracę aplikacji desktopowych. Architektura została zaprojektowana w taki sposób, że po przejściu na nową stronę aktualizowana jest tylko część treści. Dzięki temu nie ma potrzeby ponownego pobierania tych samych elementów. Jest to bardzo wygodne dla programistów i użytkowników. Do tworzenia SPA wykorzystuje się jeden z najpopularniejszych języków programowania – JavaScript. Za pomocą biblioteki jQuery można utworzyć małą aplikację internetową.
Warto jednak od razu zaznaczyć, że jQuery bardzo słabo nadaje się do tworzenia dużych projektów. Nasza firma Merehead zaleca stosowanie bardziej wydajnych technologii do rozwoju SPA. React.js, Angular.js, Vue.js i inne frameworki/biblioteki doskonale nadają się do tych celów. Ich architektura pozwala na tworzenie elastycznych aplikacji internetowych. Co więcej, w oparciu o frameworki można budować aplikacje mobilne z możliwością wielokrotnego użycia. Takie możliwości dają Rreact Native i Ionic. Główne zalety aplikacji jednostronicowej:
Mimo wszystkich swoich zalet, aplikacja jednostronicowa ma pewne wady, które utrudniają wzrost popularności:
JavaScript ma niski poziom bezpieczeństwa, ale jeśli korzystasz z nowoczesnych frameworków, mogą one zapewnić bezpieczeństwo Twojej aplikacji internetowej. Warto jednak zaznaczyć, że korzystanie z jQuery może znacząco obniżyć bezpieczeństwo Twojego projektu.
Jednostronicowe aplikacje internetowe doskonale nadają się do tworzenia dynamicznych platform z niewielką ilością danych. Dodatkowo, jeśli w przyszłości będziesz musiał zbudować aplikację mobilną, SPA będzie idealne jako baza. Główną wadą powstrzymującą szybki wzrost popularności SPA jest słaba optymalizacja SEO. Projekty, w których SEO jest najwyższym priorytetem, powinny korzystać z MPA.
Aplikacje wielostronicowe mają bardziej klasyczną architekturę. Każda strona wysyła żądanie do serwera i całkowicie aktualizuje wszystkie dane. Nawet jeśli te dane są niewielkie. W związku z tym wydajność jest marnowana na wyświetlanie tych samych elementów. W związku z tym wpływa to na szybkość i wydajność. Wielu programistów używa JavaScript/jQuery w celu zwiększenia szybkości i zmniejszenia obciążenia. Dobrym przykładem jest aktualizacja produktów bez przeładowywania strony przy korzystaniu z filtrów w sklepie internetowym. Jest to o wiele wygodniejsze i co najważniejsze szybsze. Główne zalety aplikacji wielostronicowej (MPA):
Korzystając z MPA, możesz znaleźć odpowiednie rozwiązanie pudełkowe. Na przykład użyj Magento, OpenCart do opracowania aplikacji internetowej e-commerce lub Dolphin, Elgg do rozwoju sieci społecznościowych. Wady MPA:
Główną zaletą MPA jest dobra optymalizacja SEO i ogromna ilość pakietowanych rozwiązań.
Termin „aplikacja jednostronicowa” (lub SPA) jest powszechnie używany do opisu aplikacji stworzonych dla Internetu. Aplikacje te są dostępne za pośrednictwem przeglądarki internetowej, podobnie jak inne witryny internetowe, ale oferują bardziej dynamiczne wrażenia, przypominające natywne aplikacje mobilne i stacjonarne.
Najbardziej zauważalną różnicą pomiędzy zwykłą witryną a SPA jest zmniejszenie liczby aktualizacji strony. Spa w większym stopniu wykorzystuje technologię AJAX — sposób komunikowania się z serwerami zaplecza bez całkowitego odświeżania strony — w celu ładowania danych do naszej aplikacji. W rezultacie proces renderowania (budowania) stron odbywa się przede wszystkim po stronie klienta przy użyciu JavaScript.
SPA, aplikacja jednostronicowaChoć budowanie aplikacji SPA jest modne i uważane za nowoczesną praktykę deweloperską, warto zdawać sobie sprawę z jej wad, do których zaliczają się:
- Przeglądarka wykonuje większość zadań, co oznacza, że wydajność może stanowić problem – szczególnie na mniej wydajnych urządzeniach mobilnych.
- Trudność optymalizacji wyszukiwarek (SEO), trudność w prezentowaniu treści wyszukiwarkom i serwisom społecznościowym, które udostępniają podgląd linków.
Większość współczesnych frameworków JavaScript pracuje nad obsługą renderowania serwera SPA, tj. użytkownik otrzyma całkowicie zapełnioną stronę przy pierwszym załadowaniu SPA, zamiast na przykład widzieć wskaźnik ładowania.
Renderowanie po stronie serwera może odciążyć niektóre prace związane z blogiem, które przeglądarki muszą wykonywać podczas renderowania stron, a także może pomóc w rozwiązywaniu problemów związanych z SEO i dostępnością treści.
Popularne frameworki i biblioteki JavaScript do tworzenia SPAIm więcej interaktywności dzieje się po stronie klienta, tym więcej kodu JavaScript potrzeba, aby te interaktywne elementy działały dobrze. Im więcej kodu jest napisane, tym ważniejsze jest posiadanie czystej i dobrze zaprojektowanej bazy kodu. I to jest właśnie problem, który rozwiązują frameworki JavaScript, każdy z własnym podejściem.
Istnieje wiele frameworków JavaScript typu open source, które pomagają tworzyć aplikacje SPA, takie jak.
Produkty i technologie:
Aplikacje jednostronicowe (SPA), ASP.NET Web API, Knockout.js, Ember.js, AJAX i HTML5
W artykule omówiono:
- Utwórz warstwę usług i klienta WWW AJAX dla przykładowej aplikacji;
- wzorce MVC i MVVM;
- powiązanie danych;
- utworzenie klienta WWW przy użyciu Knockout.js;
- utworzenie klienta WWW przy użyciu Ember.js.
Aplikacje jednostronicowe (SPA) to aplikacje internetowe, które ładują pojedynczą stronę HTML i dynamicznie ją aktualizują po interakcji użytkownika.
SPA używają AJAX i HTML5 do tworzenia elastycznych i responsywnych aplikacji internetowych bez ciągłego przeładowywania stron. Oznacza to jednak, że większość pracy spada po stronie klienta, czyli nad kodem JavaScript. Dla tradycyjnego programisty ASP.NET może to być trudne do osiągnięcia. Na szczęście istnieje wiele frameworków JavaScript typu open source, które ułatwiają tworzenie SPA.
W tym artykule przeprowadzę Cię krok po kroku przez proces tworzenia prostej aplikacji SPA. Po drodze poznasz kilka podstawowych koncepcji tworzenia SPA, w tym wzorce Model-View-Controller (MVC) i Model-View-ViewModel (MVVM), powiązanie danych i routing.
O przykładowej aplikacjiStworzyłem przykładową aplikację do działania na prostej bazie filmów (Rysunek 1). W lewej kolumnie strony wyświetlana jest lista gatunków. Wybranie gatunku powoduje wyświetlenie listy powiązanych filmów. Przycisk Edytuj obok wpisu umożliwia zmianę tego wpisu. Po edycji możesz kliknąć przycisk Zapisz, aby wysłać aktualizację na serwer lub przycisk Anuluj, aby odrzucić zmiany.
Ryż. 1. Aplikacja SPA dla bazy filmów
Stworzyłem dwie wersje tej aplikacji: jedną wykorzystującą bibliotekę Knockout.js i drugą korzystającą z biblioteki Ember.js. Obie biblioteki opierają się na różnych podejściach, dlatego porównanie ich będzie dość pouczające. W obu przypadkach aplikacja kliencka nie wymagała więcej niż 150 linii kodu JavaScript. Po stronie serwera wykorzystałem interfejs API sieci Web ASP.NET do obsługi klienta w formacie JSON. Kod źródłowy obu wersji można znaleźć na stronie github.com/MikeWasson/MoviesSPA.
(Uwaga: Aplikację stworzyłem przy użyciu wersji RC programu Visual Studio 2013. Niektóre rzeczy mogły ulec zmianie w wersji RTM, ale nie powinny mieć wpływu na kod.)
RecenzjaW tradycyjnej aplikacji internetowej przy każdym wywołaniu serwera renderowana jest nowa strona HTML. Spowoduje to odświeżenie strony w przeglądarce. Jeśli kiedykolwiek pisałeś formularze internetowe lub aplikację w języku PHP, ten cykl życia strony powinien być Ci znany.
W SPA po załadowaniu pierwszej strony cała interakcja z serwerem odbywa się poprzez wywołania AJAX. Te wywołania AJAX zwracają dane (nie znaczniki) - zwykle w formacie JSON. Aplikacja wykorzystuje dane JSON do dynamicznej aktualizacji strony bez jej ponownego ładowania. Ryż. Rysunek 2 ilustruje różnicę między tymi dwoma podejściami.
Ryż. 2. Porównanie tradycyjnego cyklu życia strony z cyklem życia w SPA
Jedna z zalet SPA jest oczywista: aplikacje są bardziej elastyczne i adaptacyjne, wolne od postrzępionego efektu przeładowywania strony i ponownego jej renderowania. Kolejna korzyść może być mniej oczywista i dotyczy sposobu projektowania architektury aplikacji internetowej. Wysyłanie danych aplikacji w formacie JSON zapewnia oddzielenie części prezentacyjnej (znaczniki HTML) od logiki aplikacji (żądania AJAX i odpowiedzi JSON).
Podział ten upraszcza projektowanie i rozwój każdego poziomu. W dobrze zaprojektowanej aplikacji SPA możesz zmienić znaczniki HTML bez dotykania kodu implementującego logikę aplikacji (przynajmniej idealnie). Zobaczysz to w praktyce, kiedy omówimy wiązanie danych.
W czystym SPA cała interakcja z interfejsem użytkownika odbywa się po stronie klienta za pośrednictwem JavaScript i CSS. Po początkowym załadowaniu strony serwer działa wyłącznie jako warstwa usług. Klient musi tylko wiedzieć, jakie żądania HTTP powinien wysłać. Nie ma dla niego znaczenia, w jaki sposób serwer realizuje swoją część.
Dzięki tej architekturze klient i usługa są niezależne. Możesz całkowicie zastąpić backend obsługujący usługę i dopóki nie zmienisz interfejsu API, nie uszkodzisz w żaden sposób klienta. Jest też odwrotnie: możesz wymienić całą aplikację kliencką bez zmiany warstwy usług. Można na przykład napisać natywnego klienta mobilnego korzystającego z tej usługi.
Tworzenie projektu w Visual StudioProgram Visual Studio 2013 ma jeden typ projektu aplikacji sieci Web ASP.NET. Kreator tego projektu umożliwia wybranie komponentów ASP.NET, które zostaną uwzględnione w projekcie. Zacząłem od pustego szablonu, a następnie dodałem do projektu interfejs API sieci Web ASP.NET, zaznaczając pole wyboru Interfejs API sieci Web w obszarze Dodaj foldery i podstawowe odniesienia dla, jak pokazano na rysunku 1. 3.
Ryż. 3. Utwórz nowy projekt ASP.NET w Visual Studio 2013
Nowy projekt zawiera wszystkie biblioteki potrzebne do Web API, a także trochę kodu konfiguracyjnego Web API. Nie wprowadziłem żadnych zależności do formularzy internetowych ani ASP.NET MVC.
Zwróć uwagę na rys. 3, że Visual Studio 2013 zawiera szablon aplikacji jednostronicowej. Ten szablon instaluje szkieletową aplikację SPA opartą na Knockout.js. Obsługuje logowanie przy użyciu bazy danych członkostwa grupy lub przy użyciu zewnętrznego dostawcy uwierzytelniania. Nie użyłem tego wzorca w mojej aplikacji, ponieważ chciałem pokazać prostszy przykład od zera. Szablon SPA jest doskonałym zasobem, szczególnie jeśli chcesz dodać uwierzytelnianie do swojej aplikacji.
Tworzenie warstwy usługDo stworzenia prostego interfejsu API REST dla aplikacji użyłem ASP.NET Web API. Nie będę się tutaj wdawał w szczegóły Web API - szczegóły można przeczytać pod linkiem asp.net/web-api.
Najpierw utworzyłem klasę Movie, która reprezentuje film. Ta klasa robi dwie rzeczy:
- informuje Entity Framework (EF), jak tworzyć tabele bazy danych do przechowywania informacji o filmie;
- informuje interfejs API sieci Web, jak sformatować ładunek JSON.
Nie musisz używać tego samego modelu do obu celów. Na przykład możesz chcieć, aby schemat bazy danych różnił się od ładunku JSON. W tej aplikacji stawiam na prostotę:
Następnie wykorzystałem technologię rusztowania programu Visual Studio do utworzenia kontrolera interfejsu API sieci Web, który wykorzystuje EF jako warstwę danych. Aby zastosować tę technologię, kliknij prawym przyciskiem myszy folder Kontrolery w Eksploratorze rozwiązań i wybierz opcję Dodaj/nowy element szkieletowy. W kreatorze dodawania szkieletu określ kontroler Web API 2 z akcjami, używając Entity Framework, jak pokazano na rysunku. 4.
Ryż. 4. Dodanie kontrolera Web API
Na ryc. Rysunek 5 przedstawia kreatora dodawania kontrolera. Nazwałem kontroler MoviesController. Nazwa ma znaczenie, ponieważ identyfikatory URI interfejsów API REST są oparte na nazwie kontrolera. Zaznaczyłem także pole wyboru Użyj akcji kontrolera asynchronicznego, aby skorzystać z nowej funkcjonalności asynchronicznej w EF 6. Wybrałem klasę Film jako model i określiłem Nowy kontekst danych, aby utworzyć nowy kontekst danych EF.
Ryż. 5. Kreator dodawania kontrolera
Kreator dodaje dwa pliki:
- MoviesController.cs – definiuje kontroler Web API, który implementuje REST API dla aplikacji;
- MovieSPAContext.cs to w zasadzie warstwa kleju EF, która udostępnia metody wykonywania zapytań do podstawowej bazy danych.
W tabeli Rysunek 1 przedstawia domyślny interfejs API REST wygenerowany przez technologię rusztowania.
Tabela 1. Domyślny interfejs API REST utworzony poprzez szkielet z interfejsu Web API
Wartości w nawiasach klamrowych są symbolami zastępczymi symboli wieloznacznych. Na przykład, aby uzyskać film o identyfikatorze 5, identyfikator URI będzie wyglądał następująco: /api/movies/5.
Rozszerzyłem to API, dodając metodę, która wyszukuje wszystkie filmy określonego gatunku:
Klient określa gatunek w ciągu zapytania URI. Na przykład, aby pobrać wszystkie filmy z gatunku Dramat, klient wysyła żądanie GET do /api/movies?genre=drama. Interfejs API sieci Web automatycznie kojarzy parametr żądania z parametrem gatunku w metodzie GetMoviesByGenre.
Tworzenie klienta internetowegoDo tej pory tworzyłem API REST. Jeśli wyślesz żądanie GET do /api/movies?genre=drama, początkowa odpowiedź HTTP będzie wyglądać następująco:
HTTP/1.1 200 OK Kontrola pamięci podręcznej: brak pamięci podręcznej Pragma: brak pamięci podręcznej Typ zawartości: aplikacja/json; charset=utf-8 Data: wtorek, 10 września 2013 15:20:59 GMT Długość treści: 240 [("ID":5",Title":"Forgotten Doors","Year":2009,"Gatunek": „Dramat”, „Rating”: „R”), („ID”: 6, „Tytuł”: „Blue Moon June”, „Rok”: 1998, „Gatunek”: „Dramat”, „Rating”: „PG” -13"),("ID":7,"Tytuł":"Na krawędzi słońca","Rok":1977,"Gatunek":"Dramat","Ocena":"PG-13")]
Teraz muszę napisać aplikację kliencką, która zrobi z tym coś znaczącego. Podstawowy przebieg pracy to:
- Interfejs użytkownika inicjuje żądanie AJAX;
- zaktualizuj kod HTML, aby wyświetlić ładunek odpowiedzi;
- Obsługujemy błędy AJAX.
Można by to wszystko zakodować ręcznie. Na przykład oto kod jQuery, który tworzy listę tytułów filmów:
Występują pewne problemy z tym kodem. Łączy logikę aplikacji z logiką prezentacji i jest ściśle powiązany z kodem HTML. Poza tym pisanie tego jest dość nudne. Zamiast skupiać się na aplikacji, spędzasz czas na pisaniu procedur obsługi zdarzeń i kodu manipulującego DOM.
Rozwiązaniem jest użycie frameworka JavaScript. Na szczęście jest ich sporo do wyboru, a te frameworki są open source. Niektóre z bardziej popularnych frameworków to Backbone, Angular, Ember, Knockout, Dojo i JavaScriptMVC. Większość ludzi używa odmian wzorców MVC lub MVVM, warto więc szybko przyjrzeć się tym wzorcom.
Wzorce MVC i MVVMKorzenie wzorca MVC sięgają lat 80. XX wieku i są kojarzone z wczesnymi graficznymi interfejsami użytkownika. Celem MVC jest podzielenie kodu na trzy poziomy z własnymi obowiązkami (rys. 6). Oto, co robią:
- model reprezentuje dane i logikę biznesową domeny;
- widok wyświetla model;
- kontroler akceptuje dane wejściowe użytkownika i aktualizuje model.
Ryż. 6. Wzorzec MVC
Bardziej nowoczesną odmianą MVC jest wzorzec MVVM (ryc. 7). W szablonie MVVM:
- model nadal reprezentuje dane domeny;
- model widoku jest abstrakcyjnym odzwierciedleniem widoku;
- widok renderuje model widoku i wysyła dane wejściowe użytkownika do modelu widoku.
Ryż. 7. Wzór MVVM
Zobacz model | Zobacz model |
W frameworku JavaScript MVVM widok to znacznik, a model prezentacji to kod.
MVC ma wiele odmian, a literatura na temat MVC jest często sprzeczna i zagmatwana. Być może nie jest to zaskakujące w przypadku wzorca projektowego, który rozpoczął życie w Smalltalk-76 i nadal jest używany w nowoczesnych aplikacjach internetowych. Tak więc, chociaż dobrze jest znać teorię, kluczem jest zrozumienie konkretnego frameworka MVC, którego używasz.
Tworzenie klienta sieciowego przy użyciu Knockout.jsW pierwszej wersji mojej aplikacji wykorzystałem bibliotekę Knockout.js. Knockout podąża za wzorcem MVVM, łącząc widok i model widoku poprzez powiązanie danych.
Aby utworzyć powiązania danych, do elementów HTML dodajesz specjalny atrybut powiązania danych. Na przykład następujący znacznik kojarzy element span z właściwością gatunku w modelu widoku. Za każdym razem, gdy zmienia się wartość gatunku, Knockout automatycznie aktualizuje kod HTML:
Powiązania mogą również działać w drugą stronę, np. jeśli użytkownik wprowadzi tekst w polu, Knockout aktualizuje odpowiednią właściwość w modelu widoku.
Wygodne jest, aby wiązanie danych odbywało się deklaratywnie. Nie musisz łączyć modelu widoku z elementami strony HTML. Po prostu dodaj atrybut wiązania danych, a Knockout zajmie się resztą.
Zacząłem od utworzenia strony HTML z podstawowymi znacznikami bez wiązania danych, jak pokazano na rysunku. 8.
Ryż. 8. Początkowe znaczniki HTML
Nic nie znaleziono.
(Uwaga: do stylizacji wyglądu aplikacji użyłem Bootstrapa, więc sama aplikacja zawiera mnóstwo dodatkowych elementów i klas CSS kontrolujących formatowanie. Dla przejrzystości usunąłem to wszystko z kodu).
Tworzenie modelu widokuObserwowalne elementy mają kluczowe znaczenie dla systemu wiązania danych w Knockout. Obserwowalny to obiekt przechowujący wartość i mogący powiadamiać subskrybentów o zmianie tej wartości. Poniższy kod konwertuje reprezentację filmu w formacie JSON na równoważny obiekt z obserwowalnymi polami:
Na ryc. Rysunek 9 przedstawia początkową implementację modelu widoku. Ta wersja obsługuje tylko pobieranie listy filmów. Później dodam narzędzia do edycji. Model widoku zawiera obserwowalne właściwości listy filmów, ciąg błędów i bieżący gatunek.
Ryż. 9. Model prezentacji
Należy pamiętać, że filmy znajdują się w tablicy obserwowalnej. Jak sama nazwa wskazuje, observableArray działa jak tablica powiadamiająca subskrybentów o zmianie jej zawartości.
Funkcja getByGenre wysyła do serwera żądanie AJAX w celu uzyskania listy filmów, a następnie wypełnia tablicę self.movies wynikami.
Podczas korzystania z interfejsu API REST jedną z najtrudniejszych części jest obsługa asynchronicznego charakteru protokołu HTTP. Funkcja ajax jQuery zwraca obiekt, który implementuje API Promises. Możesz użyć metody then obiektu Promise, aby skonfigurować wywołanie zwrotne uruchamiane w przypadku powodzenia wywołania AJAX i uruchamiające kolejne wywołanie zwrotne w przypadku niepowodzenia wywołania AJAX:
Teraz, gdy mam model widoku, mogę powiązać go z HTML za pomocą powiązań danych. Aby uzyskać pełną listę gatunków, która pojawia się po lewej stronie ekranu, używam następujących powiązań danych:
Atrybut data-bind zawiera jedną lub więcej deklaracji powiązania, przy czym każde powiązanie ma postać „powiązanie: wyrażenie”. W tym przykładzie powiązanie foreach nakazuje Knockoutowi przeglądanie zawartości tablicygatunki w modelu widoku. Dla każdego elementu tablicy Knockout tworzy nowy element
W tej chwili kliknięcie nazwy gatunku nic nie daje, więc dodaję powiązanie kliknięcia do obsługi zdarzeń kliknięcia:
Spowoduje to powiązanie zdarzenia kliknięcia z funkcją getByGenre w modelu widoku. Tutaj konieczne było użycie $parent, ponieważ to wiązanie jest wykonywane w kontekście foreach. Domyślnie powiązania w foreach odnoszą się do bieżącego elementu w pętli.
Ryż. 10. Dodanie kotwic do tabeli w celu wyświetlenia listy filmów
Na ryc. 10 wiązanie foreach przechodzi przez tablicę obiektów filmowych. Wewnątrz foreach powiązania tekstu odnoszą się do właściwości bieżącego obiektu.
Widoczne wiązanie na elemencie
Edytować |