SlideShare uma empresa Scribd logo
1 de 13
SPA w Acxiom
Wprowadzenie do „Single Page Applications”
22.10.2013 – Michał Kotarbiński, Grzegorz Gwoźdź

© 2013 Acxiom Corporation. All Rights
Reserved.

© 2013 Acxiom Corporation. All Rights
Reserved.
Acxiom

Agenda

2

SPA

Frontend

Frontend

Frontend

Frontend

Backend

© 2013 Acxiom Corporation. All Rights
Reserved.

Backend

Backend

Backend
Agenda







Czym jest SPA (Single Page App)
Frontend
 MV*(Model-View-Stuff)
 Szabolny w JS
 Optymalizacja
 Frameworki i narzędzia
Backend
 REST
 Projektowanie API
 Bezpieczeństwo
 Frameworki i narzędzia
Q&A

Agenda

3

SPA

Frontend

Frontend

Frontend

Frontend

Backend

© 2013 Acxiom Corporation. All Rights
Reserved.

Backend

Backend

Backend
Czym jest SPA (Single Page App)
Aplikacja Kliencka
Model
View
*

HTML
CSS
Szablony

Stan
aplikacji

REST
Client

AJAX
Aplikacja serwerowa
API







Dane

Security

Wydajność i skalowalność
User experience
Wspołbieżna praca nad Front- i Backendem
Możliwość zmiany backendu niezależnie od
frontendu (i vice versa)
Ten sam backend dla wielu apliakcji (JS,
Android, iOS)
SEO
Kompatybilność między przeglądarkami

Agenda

4

Cache

SPA

Frontend

Frontend

http://singlepageappbook.com/

Frontend

Frontend

Backend

© 2013 Acxiom Corporation. All Rights
Reserved.

Backend

Backend

Backend
MV*



Agenda

5





Miejsce przechowywania danych
Odpala Eventy podczas zmiany
Grupowany w kolekcje

View

Widok






Renderowanie do DOM
Aktualizowanie DOM
Podpinanie Eventów do elementów DOM
Zmiana Modelu

Odpala Eventy



Model

Modyfikuje



ViewModel

Presenter/Controller/ViewModel




SPA

Router
Obsługa nawigacji itp

Frontend

Frontend

Model

Frontend

Frontend

Backend

© 2013 Acxiom Corporation. All Rights
Reserved.

Backend

Backend

Backend
Szablony w JS







Funkcja js generowana na podstawie szblonu html
Generowanie „reprezentacji” danych otrzymanych z
modelu

{{view todoList}}
<ul>
Nieopłacalne w małych aplikacjach - choć wszystkie rosną
{{each todos}}
;)
{{view todoView}}
Problem z wyborem:
<li>
http://garann.github.io/template-chooser/
<div class="todo {{ done? }}">
{{{ text }}}</div>
Zalety
</li>
 String interpolation
{{/view}}
 Esacping HTML
{{/each}}
 Simple Expressions
</ul>
 Listy elementów
{{/view}}
 Zagnieżdżone widoki



Agenda

6

Handlebars.js:

Znacznie szybsze (i wygodniejsze) niż ręczna modyfikacja
DOM

SPA

Frontend

Frontend

Frontend

Frontend

Backend

© 2013 Acxiom Corporation. All Rights
Reserved.

Backend

Backend

Backend
Optymalizacja







Szablony




Prekompilacja
Upraszczanie






Minimalizacja






AMD: Require.JS
 Organizacja kodu w moduły

Pliki JS (require.js)
HTML
CSS (saas / compas)
grafiki

Możliwość wybiórczego pobierania
submodułów

Ograniczenie liczby zapytań
Minimalizacja

Package

App

Redukcja zapytań do REST API

Widok

zależy

zależy

Model

Router
Zależy /
pobiera
Agenda

7

SPA

Frontend

Frontend

Frontend

Frontend

Backend

© 2013 Acxiom Corporation. All Rights
Reserved.

Backend

zależy

Kolekcje
Backend

Backend
Frameworki i narzędzia




Agenda

8




Frameworki






Backbone
Knockout
Angular
Styleguide

SPA

jQuery ;-)
KendoUI
Handlebars
Mocha.JS

Frontend

Narzędzia

Frontend

Frontend






JsHint, JsLint
Yeoman
Grunt
Bower



Biblioteki






Node.JS

Biblioteki dodatkowe

Frontend





Compass
Livereload
Connect
.... Oraz wiele innych

Backend

© 2013 Acxiom Corporation. All Rights
Reserved.

Backend

Backend

Backend
REST
REST = Representational State Transfer
REST -„Styl architektury”








Bezstanowość

Buforowanie (cache)
Jednorodny interfejs

THINK DATA!!!

System warstowy
(Opcjonalnie) kod na żądanie

Agenda

9

W REST najważniejsze są dane
(zasoby) nie protokoły i czynności
jakie na nich wykonujemy.

Klient-serwer

SPA

Frontend

Frontend

Frontend

Frontend

Backend

© 2013 Acxiom Corporation. All Rights
Reserved.

Backend

Backend

Backend
Projektowanie API
•

•
•
•

•
•
•
•
•

GET:

Odczyt

POST:

Utworzenie

PUT:

Update




DELETE: Usunięcie
HEAD:



Tylko metadane

Dwa typu zasobów:

•
•
•
•

GET http://example.com/customers?query=foobar
400 Bad Request
{error: „name cannot be null”}
http://example.com/1.0/customers
POST http://example.com/getCustomers

Kolekcje

/customers

Instancje

/customers/1234

200 OK
{code:”INVALID”, error: „name cannot be null”}

Wersjonowanie API

http://example.com/customers

URI
Media-Type

Reprezentacje, Nagłówki Kody HTTP:

•
•
•

Agenda

10

Przykłady

Akcje to metody HTTP (nie tylko GET i POST)

Nagłówki Content-Type, Accept, ETag...
400,409,..., nie ma potrzeby wymyślania własnych
Informacje dodatkowe np. paginacja przez QueryParams
SPA

Frontend

Frontend

Frontend

Frontend

Backend

© 2013 Acxiom Corporation. All Rights
Reserved.

Backend

Backend

Backend
Bezpieczeństwo
Nagłówki:



401 Unauthorized => „Musisz powiedzieć kim
jesteś”



403 Forbidden

=> „You shall not pass!”

Autoryzacja i autentykacja:






OAuth
API Key/Token
Basic over SSL
Unikać sesji (skalowalność!), choć nie
zawsze możliwe/opłacalne

Agenda

11

SPA

Frontend

Frontend

Frontend

Frontend

Backend

© 2013 Acxiom Corporation. All Rights
Reserved.

Backend

Backend

Backend
Frameworki i narzędzia
API




JAX-RS (Jeresy, RESTEasy)

@Path("/products/1.0")
@Produces("application/json")
@Consumes("application/json")
public class Products {
@GET
public Product getProduct() { ... }
@GET
@Path("{id}")
public Product getProduct(@PathPatam("id") int productId) { ... }

Spring MVC

Container





@POST
public Response createProduct(Product product) {
...
return Response.status(201).entity(result).build();
}

JBoss
Tomcat

@PUT
@Path("{id}")
public Response updateProduct(@PathPatam("id") int productId,
Product product) { ... }

Jetty

DLA APLIKACJI KLIENCKIEJ
NIE MA ZNACZENIA!!!
Agenda

12

SPA

Frontend

@DELETE
@Path("{id}")
public Product deleteProduct(@PathPatam("id") int productId) { ... }
}

Frontend

Frontend

Frontend

Backend

© 2013 Acxiom Corporation. All Rights
Reserved.

Backend

Backend

Backend
Dzięki!
Szukamy nowych pracowników!
W naszym biurze znajdziesz...

© 2013 Acxiom Corporation. All Rights
Reserved.

© 2013 Acxiom Corporation. All Rights
Reserved.

Mais conteúdo relacionado

Semelhante a Single Page Applications przy wykorzystaniu REST

Aplikacje internetowe (2010)
Aplikacje internetowe (2010)Aplikacje internetowe (2010)
Aplikacje internetowe (2010)Adrian Kalbarczyk
 
Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?Bartlomiej Zass
 
Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?
Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?
Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?Piotr Grabski-Gradziński
 
Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski, N...
Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski, N...Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski, N...
Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski, N...Grupa Unity
 
Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski - ...
Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski - ...Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski - ...
Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski - ...Intratic
 
Girls in It - Front-end & Back-end. Jak zacząć
Girls in It - Front-end & Back-end. Jak zacząćGirls in It - Front-end & Back-end. Jak zacząć
Girls in It - Front-end & Back-end. Jak zacząćmonterail
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńPaweł Kondraciuk
 
Tworzenie niezależnego środowiska do developmentu aplikacji frontendowej
Tworzenie niezależnego środowiska do developmentu aplikacji frontendowejTworzenie niezależnego środowiska do developmentu aplikacji frontendowej
Tworzenie niezależnego środowiska do developmentu aplikacji frontendowejTomasz Borowski
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja BazyPrzemysław ...
 
Websites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGWebsites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGBart Zaremba
 
Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?tkryskiewicz
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztatyintive
 
3 możliwości kodowania aplikacji mobilnych. Zalety i wady
3 możliwości kodowania aplikacji mobilnych. Zalety i wady3 możliwości kodowania aplikacji mobilnych. Zalety i wady
3 możliwości kodowania aplikacji mobilnych. Zalety i wadyappreal.net - Software House
 
Nowe Trendy W Projektowaniu Aplikacji Webowych
Nowe Trendy W Projektowaniu Aplikacji WebowychNowe Trendy W Projektowaniu Aplikacji Webowych
Nowe Trendy W Projektowaniu Aplikacji WebowychMarcin Daczkowski
 

Semelhante a Single Page Applications przy wykorzystaniu REST (20)

Aplikacje internetowe (2010)
Aplikacje internetowe (2010)Aplikacje internetowe (2010)
Aplikacje internetowe (2010)
 
Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?
 
Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?
Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?
Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?
 
AJAX - wdw1
AJAX - wdw1AJAX - wdw1
AJAX - wdw1
 
Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski, N...
Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski, N...Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski, N...
Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski, N...
 
Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski - ...
Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski - ...Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski - ...
Konferencja Intratic Przyjazny SharePoint, Krzysztof Lis, Paweł Walczewski - ...
 
Szybkie tworzenie aplikacji na iPhone i Android - Netcamp #16
Szybkie tworzenie aplikacji na iPhone i Android - Netcamp #16Szybkie tworzenie aplikacji na iPhone i Android - Netcamp #16
Szybkie tworzenie aplikacji na iPhone i Android - Netcamp #16
 
Girls in It - Front-end & Back-end. Jak zacząć
Girls in It - Front-end & Back-end. Jak zacząćGirls in It - Front-end & Back-end. Jak zacząć
Girls in It - Front-end & Back-end. Jak zacząć
 
Responsive Web Design - Michał Rachowski Squiz
Responsive Web Design - Michał Rachowski SquizResponsive Web Design - Michał Rachowski Squiz
Responsive Web Design - Michał Rachowski Squiz
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzień
 
Tworzenie niezależnego środowiska do developmentu aplikacji frontendowej
Tworzenie niezależnego środowiska do developmentu aplikacji frontendowejTworzenie niezależnego środowiska do developmentu aplikacji frontendowej
Tworzenie niezależnego środowiska do developmentu aplikacji frontendowej
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja Bazy
 
Testowanie na 101 sposobów
Testowanie na 101 sposobówTestowanie na 101 sposobów
Testowanie na 101 sposobów
 
Websites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGWebsites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUG
 
Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?
 
Wydajny frontend 2023
Wydajny frontend 2023Wydajny frontend 2023
Wydajny frontend 2023
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztaty
 
3 możliwości kodowania aplikacji mobilnych. Zalety i wady
3 możliwości kodowania aplikacji mobilnych. Zalety i wady3 możliwości kodowania aplikacji mobilnych. Zalety i wady
3 możliwości kodowania aplikacji mobilnych. Zalety i wady
 
Nowe Trendy W Projektowaniu Aplikacji Webowych
Nowe Trendy W Projektowaniu Aplikacji WebowychNowe Trendy W Projektowaniu Aplikacji Webowych
Nowe Trendy W Projektowaniu Aplikacji Webowych
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 

Mais de 3camp

Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawekOchrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek3camp
 
HTTPS bez wymówek
HTTPS bez wymówekHTTPS bez wymówek
HTTPS bez wymówek3camp
 
Jak udokumentować bazę danych
Jak udokumentować bazę danychJak udokumentować bazę danych
Jak udokumentować bazę danych3camp
 
ORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowaniaORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowania3camp
 
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.3camp
 
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...3camp
 
Wykorzystanie języka Kotlin do aplikacji na platformie Android
Wykorzystanie języka Kotlin do aplikacji na platformie AndroidWykorzystanie języka Kotlin do aplikacji na platformie Android
Wykorzystanie języka Kotlin do aplikacji na platformie Android3camp
 
Learn you some rx for the greater good
Learn you some rx for the greater goodLearn you some rx for the greater good
Learn you some rx for the greater good3camp
 
Google App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjachGoogle App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjach3camp
 
Reakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyceReakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyce3camp
 
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”3camp
 
AngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektuAngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektu3camp
 
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...3camp
 
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?3camp
 
Artur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupachArtur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupach3camp
 
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...3camp
 
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnieMarcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie3camp
 
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...3camp
 
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...3camp
 
Marcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk ModelMarcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk Model3camp
 

Mais de 3camp (20)

Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawekOchrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek
 
HTTPS bez wymówek
HTTPS bez wymówekHTTPS bez wymówek
HTTPS bez wymówek
 
Jak udokumentować bazę danych
Jak udokumentować bazę danychJak udokumentować bazę danych
Jak udokumentować bazę danych
 
ORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowaniaORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowania
 
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
 
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
 
Wykorzystanie języka Kotlin do aplikacji na platformie Android
Wykorzystanie języka Kotlin do aplikacji na platformie AndroidWykorzystanie języka Kotlin do aplikacji na platformie Android
Wykorzystanie języka Kotlin do aplikacji na platformie Android
 
Learn you some rx for the greater good
Learn you some rx for the greater goodLearn you some rx for the greater good
Learn you some rx for the greater good
 
Google App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjachGoogle App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjach
 
Reakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyceReakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyce
 
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
 
AngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektuAngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektu
 
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
 
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
 
Artur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupachArtur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupach
 
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
 
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnieMarcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
 
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
 
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
 
Marcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk ModelMarcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk Model
 

Single Page Applications przy wykorzystaniu REST

  • 1. SPA w Acxiom Wprowadzenie do „Single Page Applications” 22.10.2013 – Michał Kotarbiński, Grzegorz Gwoźdź © 2013 Acxiom Corporation. All Rights Reserved. © 2013 Acxiom Corporation. All Rights Reserved.
  • 2. Acxiom Agenda 2 SPA Frontend Frontend Frontend Frontend Backend © 2013 Acxiom Corporation. All Rights Reserved. Backend Backend Backend
  • 3. Agenda     Czym jest SPA (Single Page App) Frontend  MV*(Model-View-Stuff)  Szabolny w JS  Optymalizacja  Frameworki i narzędzia Backend  REST  Projektowanie API  Bezpieczeństwo  Frameworki i narzędzia Q&A Agenda 3 SPA Frontend Frontend Frontend Frontend Backend © 2013 Acxiom Corporation. All Rights Reserved. Backend Backend Backend
  • 4. Czym jest SPA (Single Page App) Aplikacja Kliencka Model View * HTML CSS Szablony Stan aplikacji REST Client AJAX Aplikacja serwerowa API      Dane Security Wydajność i skalowalność User experience Wspołbieżna praca nad Front- i Backendem Możliwość zmiany backendu niezależnie od frontendu (i vice versa) Ten sam backend dla wielu apliakcji (JS, Android, iOS) SEO Kompatybilność między przeglądarkami Agenda 4 Cache SPA Frontend Frontend http://singlepageappbook.com/ Frontend Frontend Backend © 2013 Acxiom Corporation. All Rights Reserved. Backend Backend Backend
  • 5. MV*  Agenda 5    Miejsce przechowywania danych Odpala Eventy podczas zmiany Grupowany w kolekcje View Widok     Renderowanie do DOM Aktualizowanie DOM Podpinanie Eventów do elementów DOM Zmiana Modelu Odpala Eventy  Model Modyfikuje  ViewModel Presenter/Controller/ViewModel   SPA Router Obsługa nawigacji itp Frontend Frontend Model Frontend Frontend Backend © 2013 Acxiom Corporation. All Rights Reserved. Backend Backend Backend
  • 6. Szablony w JS      Funkcja js generowana na podstawie szblonu html Generowanie „reprezentacji” danych otrzymanych z modelu {{view todoList}} <ul> Nieopłacalne w małych aplikacjach - choć wszystkie rosną {{each todos}} ;) {{view todoView}} Problem z wyborem: <li> http://garann.github.io/template-chooser/ <div class="todo {{ done? }}"> {{{ text }}}</div> Zalety </li>  String interpolation {{/view}}  Esacping HTML {{/each}}  Simple Expressions </ul>  Listy elementów {{/view}}  Zagnieżdżone widoki  Agenda 6 Handlebars.js: Znacznie szybsze (i wygodniejsze) niż ręczna modyfikacja DOM SPA Frontend Frontend Frontend Frontend Backend © 2013 Acxiom Corporation. All Rights Reserved. Backend Backend Backend
  • 7. Optymalizacja     Szablony   Prekompilacja Upraszczanie    Minimalizacja     AMD: Require.JS  Organizacja kodu w moduły Pliki JS (require.js) HTML CSS (saas / compas) grafiki Możliwość wybiórczego pobierania submodułów Ograniczenie liczby zapytań Minimalizacja Package App Redukcja zapytań do REST API Widok zależy zależy Model Router Zależy / pobiera Agenda 7 SPA Frontend Frontend Frontend Frontend Backend © 2013 Acxiom Corporation. All Rights Reserved. Backend zależy Kolekcje Backend Backend
  • 8. Frameworki i narzędzia   Agenda 8   Frameworki     Backbone Knockout Angular Styleguide SPA jQuery ;-) KendoUI Handlebars Mocha.JS Frontend Narzędzia Frontend Frontend     JsHint, JsLint Yeoman Grunt Bower  Biblioteki     Node.JS Biblioteki dodatkowe Frontend    Compass Livereload Connect .... Oraz wiele innych Backend © 2013 Acxiom Corporation. All Rights Reserved. Backend Backend Backend
  • 9. REST REST = Representational State Transfer REST -„Styl architektury”       Bezstanowość Buforowanie (cache) Jednorodny interfejs THINK DATA!!! System warstowy (Opcjonalnie) kod na żądanie Agenda 9 W REST najważniejsze są dane (zasoby) nie protokoły i czynności jakie na nich wykonujemy. Klient-serwer SPA Frontend Frontend Frontend Frontend Backend © 2013 Acxiom Corporation. All Rights Reserved. Backend Backend Backend
  • 10. Projektowanie API • • • • • • • • • GET: Odczyt POST: Utworzenie PUT: Update   DELETE: Usunięcie HEAD:  Tylko metadane Dwa typu zasobów: • • • • GET http://example.com/customers?query=foobar 400 Bad Request {error: „name cannot be null”} http://example.com/1.0/customers POST http://example.com/getCustomers Kolekcje /customers Instancje /customers/1234 200 OK {code:”INVALID”, error: „name cannot be null”} Wersjonowanie API http://example.com/customers URI Media-Type Reprezentacje, Nagłówki Kody HTTP: • • • Agenda 10 Przykłady Akcje to metody HTTP (nie tylko GET i POST) Nagłówki Content-Type, Accept, ETag... 400,409,..., nie ma potrzeby wymyślania własnych Informacje dodatkowe np. paginacja przez QueryParams SPA Frontend Frontend Frontend Frontend Backend © 2013 Acxiom Corporation. All Rights Reserved. Backend Backend Backend
  • 11. Bezpieczeństwo Nagłówki:  401 Unauthorized => „Musisz powiedzieć kim jesteś”  403 Forbidden => „You shall not pass!” Autoryzacja i autentykacja:     OAuth API Key/Token Basic over SSL Unikać sesji (skalowalność!), choć nie zawsze możliwe/opłacalne Agenda 11 SPA Frontend Frontend Frontend Frontend Backend © 2013 Acxiom Corporation. All Rights Reserved. Backend Backend Backend
  • 12. Frameworki i narzędzia API   JAX-RS (Jeresy, RESTEasy) @Path("/products/1.0") @Produces("application/json") @Consumes("application/json") public class Products { @GET public Product getProduct() { ... } @GET @Path("{id}") public Product getProduct(@PathPatam("id") int productId) { ... } Spring MVC Container    @POST public Response createProduct(Product product) { ... return Response.status(201).entity(result).build(); } JBoss Tomcat @PUT @Path("{id}") public Response updateProduct(@PathPatam("id") int productId, Product product) { ... } Jetty DLA APLIKACJI KLIENCKIEJ NIE MA ZNACZENIA!!! Agenda 12 SPA Frontend @DELETE @Path("{id}") public Product deleteProduct(@PathPatam("id") int productId) { ... } } Frontend Frontend Frontend Backend © 2013 Acxiom Corporation. All Rights Reserved. Backend Backend Backend
  • 13. Dzięki! Szukamy nowych pracowników! W naszym biurze znajdziesz... © 2013 Acxiom Corporation. All Rights Reserved. © 2013 Acxiom Corporation. All Rights Reserved.