tytuł oryginału: mastering microservices with javaoauth 2.0 121 specyfikacja oauth 2.0 — krótko...
TRANSCRIPT
Tytuł oryginału: Mastering Microservices with Java
Tłumaczenie: Krzysztof Rychlicki-Kicior
ISBN: 978-83-283-3218-8
Copyright © Packt Publishing 2016
First published in the English language under the title ‘Mastering Microservices with Java – (9781785285172)’.
Polish edition copyright © 2017 by Helion SA. All rights reserved.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.
Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/mikjavMożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
• Kup książkę• Poleć książkę • Oceń książkę
• Księgarnia internetowa• Lubię to! » Nasza społeczność
Spis tre ci
O autorach 9
O recenzencie 10
Przedmowa 11
Rozdzia 1. Koncepcja rozwi zania 15
Rozwój mikrous ug 16Omówienie architektury monolitycznej 17Problemy architektury monolitycznej i ich rozwi zania w mikrous ugach 17
Jednowymiarowa skalowalno 20Wycofanie wersji produkcyjnej w razie problemów 21Problemy zwi zane z wdra aniem nowych technologii 21Mikrous ugi a metodyki zwinne 22atwo tworzenia oprogramowania — da si lepiej! 23
Budowanie mikrous ug — kolejno wykonywania dzia a 24Wdra anie mikrous ug w kontenerach na przyk adzie Dockera 25
Podsumowanie 28
Rozdzia 2. Konfiguracja rodowiska programistycznego 29
Konfiguracja Spring Boot 30Omówienie technologii Spring Boot 30Dodajemy Spring Boot do przyk adowego projektu 31Dodajemy wbudowany serwer Jetty 33
Przyk adowa aplikacja typu REST 34Piszemy klas kontrolera REST 35Uruchamianie przyk adowej aplikacji 38
Konfiguracja procesu budowania aplikacji 39Uruchomienie narz dzia Maven 39Wykonywanie polecenia w terminalu 40
Poleć książkęKup książkę
Spis tre ci
4
Testowanie API za pomoc rozszerzenia Postman 40Prawid owe przypadki testowe 43Nieprawid owe przypadki testowe 44
Instalacja i konfiguracja rodowiska NetBeans 45ród a 48
Podsumowanie 49
Rozdzia 3. Projektowanie sterowane modelem dziedziny 51
Podstawy projektowania sterowanego modelem dziedziny 52Poj cia, terminy, definicje 53
Wszechobecne s ownictwo 53Wielowarstwowa architektura 54Artefakty zwi zane z projektowaniem sterowanym modelem dziedziny 55
Projektowanie strategiczne i jego za o enia 63Ograniczony kontekst 64Integracja ci g a 64Mapa kontekstu 65
Przyk adowa us uga dziedziny 68Implementacja encji 69Implementacja repozytorium 70Implementacja us ugi 72
Podsumowanie 73
Rozdzia 4. Implementujemy mikrous ug 75
Omówienie systemu OTRS 76Opracowywanie i implementacja mikrous ug 77
Mikrous uga Restaurant 78Us ugi u ytkowników i rezerwacji 87Rejestracja i wykrywanie us ug (us uga Eureka) 87Wykonanie 88
Testowanie 88ród a 91
Podsumowanie 91
Rozdzia 5. Wdra anie i testowanie 93
Podstawy architektury mikrous ug w Netflix OSS 93Równowa enie obci enia 95
Równowa enie obci enia po stronie klienta 95Równowa enie obci enia po stronie serwera 98
Wy cznik automatyczny a monitorowanie 101Stosowanie metod awaryjnych aplikacji Hystrix 101Monitorowanie us ug 102Konfiguracja pulpitu Hystrix 103Konfiguracja aplikacji Turbine 105
Wdra anie mikrous ug za pomoc kontenerów 106Instalacja i konfiguracja 106
ród a 115Podsumowanie 116
Poleć książkęKup książkę
Spis tre ci
5
Rozdzia 6. Mikrous ugi a bezpiecze stwo 117
Dodanie obs ugi protoko u SSL 117Uwierzytelnianie i autoryzacja 120
OAuth 2.0 121Specyfikacja OAuth 2.0 — krótko i na temat 122
Implementacja OAuth z wykorzystaniem Spring Security 138ród a 147
Podsumowanie 148
Rozdzia 7. U ytkowanie mikrous ug za pomoc aplikacji webowej 149
Ogólne za o enia frameworka AngularJS 150MVC 150MVVM 150Modu y 151Dostawcy i us ugi 152Zakresy 153Kontrolery 153Filtry 153Dyrektywy 154Router interfejsu u ytkownika — UI-Router 154
Implementacja funkcji systemu OTRS 155Lista restauracji/strona domowa 155Wyszukiwanie restauracji 167Widok szczegó ów restauracji z opcj rezerwacji 168Strona logowania 169Potwierdzenie rezerwacji 172
Konfiguracja aplikacji webowej 172ród a 183
Podsumowanie 184
Rozdzia 8. Dobre praktyki i istotne regu y tworzenia mikrous ug 185
W a ciwy sposób my lenia 185Dobre praktyki i przydatne regu y 187
Nanous uga (niezalecana), rozmiar i monolityczno 187Ci g a integracja i wdra anie 188Automatyzacja testów end-to-end 189Automonitorowanie i logowanie 190Oddzielny magazyn danych dla ka dej mikrous ugi 191Granice transakcji 192
Narz dzia i frameworki do tworzenia mikrous ug 193Netflix Open Source Software (OSS) 193
ród a 199Podsumowanie 199
Poleć książkęKup książkę
Spis tre ci
6
Rozdzia 9. Rozwi zywanie problemów 201
Obs uga logów i stos ELK 201Krótkie wprowadzenie 202Konfiguracja stosu ELK 204
Zastosowanie skorelowanych ID dla wywo a us ug 207Jak rozwi za ten problem? 207
Zale no ci i wersje 207Zale no ci cykliczne i ich wp yw 207Zarz dzanie ró nymi wersjami 208Dowiedz si wi cej 208
ród a 209Podsumowanie 209
Skorowidz 211
Poleć książkęKup książkę
4
Implementujemymikrous ug
W tym rozdziale przejdziemy od projektu do implementacji naszej przyk adowej aplikacji— internetowego systemu rezerwacji stolików (Online Table Reservation System — OTRS).Skorzystamy z projektu opracowanego w poprzednim rozdziale i rozszerzymy go, aby stwo-rzy mikrous ug . Poznasz tu zasady implementacji projektu, ale tak e inne wa ne aspektytworzenia mikrous ug — budowanie, testowanie i tworzenie archiwów aplikacji. Cho skon-centrujemy si na implementacji us ugi restauracji, podobne podej cie mo na zastosowarównie przy tworzeniu innych us ug wchodz cych w sk ad OTRS.
W tym rozdziale zajmiemy si nast puj cymi zagadnieniami: Omówimy ogólne za o enia systemu OTRS. Zaimplementujemy mikrous ug . Przeprowadzimy testy.
Skorzystamy z kluczowych konceptów DDD, które omówili my w poprzednim rozdziale.Zastosowali my je wtedy do stworzenia modelu dziedzinowego w j zyku Java. Teraz przej-dziemy od prostej implementacji dziedziny do implementacji opartej na frameworku Spring.Skorzystamy z technologii Spring Boot, aby zaimplementowa koncepcje wynikaj ce z pro-jektowania sterowanego modelem dziedziny, a tak e przekszta cimy je z j zyka Java do mo-delu opartego na frameworku Spring.
U yjemy tak e frameworka Spring Cloud, który pozwoli nam na stworzenie rozwi zaniachmurowego. Spring Cloud równie wykorzystuje Spring Boot, dzi ki któremu mo emy za-stosowa wbudowany kontener aplikacji (Tomcat lub Jetty) wewn trz Twojej us ugi, opakowanej
Poleć książkęKup książkę
Mikrous ugi w Javie. Poradnik eksperta
76
jako JAR lub WAR. Archiwum jest uruchamiane jako osobny proces, a mikrous uga zajmie sidostarczaniem odpowiedzi dla wszystkich da , które zosta y opisane na li cie ko cówekw danej us udze.
Spring Cloud mo na zintegrowa tak e z us ug Netflix Eureka — rejestrem us ug. OTRSskorzysta z tej us ugi do rejestracji i wykrywania mikrous ug.
Omówienie systemu OTRSZnaj c zasady tworzenia mikrous ug, mo emy stwierdzi , e ka da cz aplikacji, która jestw stanie funkcjonowa niezale nie, powinna by odr bn mikrous ug . W przypadku systemuOTRS mo emy wyró ni trzy g ówne mikrous ugi — restauracj , rezerwacj i u ytkownika.Oczywi cie, mo na definiowa równie inne mikrous ugi, jednak my skupimy si na tychtrzech. Aby by y one w pe ni niezale ne, utworzymy dla nich odr bne bazy danych.
Zakres funkcjonalny wymienionych us ug mo na opisa nast puj co: Us uga restauracji (Restaurant): umo liwia podstawowe zarz dzanie zasobami
restauracji — tzw. CRUD (ang. Create, Read, Update, Delete — dodawanie,odczyt, modyfikacja i usuni cie), a dodatkowo ich przeszukiwanie z wykorzystaniemrozmaitych kryteriów. Pozwala równie na wi zanie restauracji i stolików.Restauracja udost pni tak e encje stolika (Table).
Us uga u ytkownika (User): pozwoli na wykonanie operacji typu CRUD dla encji User. Us uga rezerwacji (Booking): pozwoli na dokonywanie rezerwacji (operacje typu
CRUD) na podstawie us ug Restaurant i User. Przeszukiwanie dost pne w us udzeRestaurant pozwoli na znalezienie wybranej restauracji; lista powi zanych z restauracjstolików umo liwi wybór konkretnego stolika na podstawie informacji o dost pno cistolików. Us uga ta utworzy zwi zek pomi dzy encj Restaurant/Table a User.
Rysunek 4.1 podkre la fakt, e ka da z mikrous ug dzia a niezale nie. To w a nie dlategomikrous ugi mog by tworzone, rozwijane i zarz dzane niezale nie, bez wp ywu na inne.Ka da z us ug ma odr bn architektur warstwow i baz danych. Nie ma ogranicze codo stosowanych do tworzenia technologii, frameworków czy j zyków programowania.W dowolnym momencie mo esz te tworzy nowe mikrous ugi, np. do celów ksi gowych,które by yby wykorzystywane przez us ug Restaurant. To samo dotyczy us ug analitycz-nych i do raportowania.
Do celów demonstracyjnych zajmiemy si implementacj ograniczon do trzech wymienio-nych powy ej us ug.
Poleć książkęKup książkę
Rozdzia 4. • Implementujemy mikrous ug
77
Rysunek 4.1. Mikrous ugi a rejestracja i wykrywanie
Opracowywanie i implementacja mikrous ugTeraz zajmiemy si implementacj sterowan modelem dziedziny, a tak e podej ciem przed-stawionym w poprzednim rozdziale w celu implementowania mikrous ug za pomoc frame-worka Spring Cloud. Przypomnijmy sobie kluczowe artefakty naszego projektu:
Encje: s to obiekty identyfikowalne i niezmienne przez czas yciaproduktu/us ugi. Obiekty te nie s definiowane za pomoc swoich atrybutów— maj odr bn to samo i zachowan ci g o istnienia.Encje maj swoj to samo i zachowuj ci g o , a tak e atrybuty, które jednak niemaj wp ywu na ci g o . Obiekty warto ci (ang. Value Objects — VO) maj za totylko atrybuty, nie dysponuj c w asn to samo ci . Dobr praktyk jest unikaniezmian w obiektach warto ci. We frameworku encje stanowi zwyk e obiekty j zykaJava (POJO), dlatego b dziemy ich u ywa tak e jako obiektów warto ci.
Us ugi: stanowi typowy element wielu projektów. S u ywane w warstwiedziedziny w projektowaniu sterowanym modelem dziedziny. Obiekt us uginie zawiera wewn trznego stanu — jego jedynym celem jest udost pnianiezachowania dziedziny. Obiekty us ug udost pniaj zachowania, które nie szwi zane z konkretnymi encjami lub obiektami warto ci. Obiekty us ugudost pniaj jedno lub wiele zachowa jednej lub wi kszej liczbie encji lubobiektów warto ci. Najlepiej jest definiowa us ugi jawnie w modelu dziedziny.
Poleć książkęKup książkę
Mikrous ugi w Javie. Poradnik eksperta
78
Obiekt repozytorium: obiekt ten stanowi element modelu dziedziny, który obs ugujepami trwa , tak jak bazy danych, zewn trzne ród a itd., aby pozyskiwautrwalone obiekty. Po otrzymaniu dania przez repozytorium w celu uzyskaniareferencji do obiektu, je li obiekt jest dost pny bezpo rednio w repozytorium,zwracana jest do niego referencja. W przeciwnym razie najpierw jest onwczytywany z zewn trznego ród a.
Pobieranie przyk adowego kodu
Przyk adowy kod jest dost pny na serwerze FTP wydawnictwa Helion, pod adresem ftp://ftp.helion.pl/przyklady/mikjav.zip.
API ka dej mikrous ugi stanowi us ug sieciow typu REST. API naszego systemuwykorzystuje metody protoko u HTTP, takie jak GET i POST, a tak e typowstruktur ko cówki typu REST. dania i odpowiedzi s zdefiniowane za pomocformatu JSON. Mo na równie stosowa j zyk XML.
Mikrous uga RestaurantMikrous uga Restaurant zostanie udost pniona za pomoc ko cówek typu REST. Poni szeko cówki s dost pne w mikrous udze Restaurant. Oczywi cie, liczba ko cówek nie jestograniczona:
Ko cówka GET /v1/restaurants/<Restaurant_ID>
Parametry
Nazwa Opis
Restaurant_ID Parametr cie ki, który reprezentuje unikaln restauracj skojarzon z tym ID.
danie
W a ciwo Typ Opis
Brak
Odpowied
W a ciwo Typ Opis
Restaurant Obiekt typu Restaurant Obiekt restauracji skojarzony z danym ID
Poleć książkęKup książkę
Rozdzia 4. • Implementujemy mikrous ug
79
Ko cówka GET /v1/restaurants
Parametry
Nazwa Opis
Brak
danie
W a ciwo Typ Opis
Name String Parametr zapytania, który okre la nazw lubfragment nazwy restauracji.
Odpowied
W a ciwo Typ Opis
Restaurants Tablica obiektów restauracji Zwraca wszystkie restauracje, których nazwyzawieraj warto parametru.
Ko cówka POST /v1/restaurants
Parametry
Nazwa Opis
Brak
danie
W a ciwo Typ Opis
Restaurant Obiekt restauracji Reprezentacja obiektu restauracji w formacie JSON
Odpowied
W a ciwo Typ Opis
Restaurant Obiekt restauracji Nowo utworzony obiekt typu Restaurant
Na tej samej zasadzie mo emy dodawa rozmaite ko cówki i ich implementacje. Do celówdemonstracyjnych powy sze ko cówki zostan zaimplementowane za pomoc technologiiSpring Cloud.
Klasa kontroleraKontroler us ugi Restaurant wykorzystuje adnotacj @RestController, aby wygenerowa ko -cówki us ugi. Szczegó y dzia ania tego mechanizmu omówili my w rozdziale 2. @RestControllerto adnotacja na poziomie klasy, która jest u ywana wobec klas zasobów. Jest to po czenie ad-notacji @Controller i @ResponseBody. Zwraca ona obiekt dziedziny.
Poleć książkęKup książkę
Mikrous ugi w Javie. Poradnik eksperta
80
Wersjonowanie APIId c naprzód, chcia bym wyja ni obecno prefiksu v1 w ko cówce typu REST. Oznacza onawersj API. Jest to niezwykle wa na kwestia. Wersjonowanie API jest kluczowe, poniewa APIz czasem ulegaj zmianom. Twoja wiedza i do wiadczenie zmieniaj si z up ywem czasu, coprowadzi do wprowadzania zmian w API. Ka da zmiana w API mo e spowodowa problemyz dzia aniem aplikacji klienckich.
Zarz dzanie wersjami API mo na zrealizowa na kilka sposobów. Jednym z nich jest podawaniewersji w cie ce lub w nag ówku HTTP. Nag ówek HTTP mo e zawiera specjalny nag ówek
dania lub nag ówek Accept, dzi ki czemu mo na okre li wersj API. Wi cej informacji znaj-dziesz w ksi ce REST. Najlepsze praktyki i wzorce w j zyku Java Bhaktiego Mehty (Helion, 2015).
@RestController@RequestMapping("/v1/restaurants")public class RestaurantController { protected Logger logger = Logger.getLogger(RestaurantController.class.getName()); protected RestaurantService restaurantService; @Autowired public RestaurantController(RestaurantService restaurantService) { this.restaurantService = restaurantService; } /** * Pobiera restauracje o okre lonej nazwie. Niewra liwo na wielko znaków jest cz ciowo obs ugiwana. * Wywo anie <code>http://…/restaurants/rest</code> znajdzie wi c dowolne restauracje zawieraj ce * cz on 'rest' lub 'REST' w nazwie. * * @param name * @return Niepusta kolekcja restauracji. */ @RequestMapping(method = RequestMethod.GET) public ResponseEntity<Collection<Restaurant>> findByName(@RequestParam("name") String name) { logger.info(String.format("Wywo anie metody restaurant-service findByName():{} dla {} ", restaurantService.getClass().getName(), name)); name = name.trim().toLowerCase(); Collection<Restaurant> restaurants; try { restaurants = restaurantService.findByName(name); } catch (Exception ex) { logger.log(Level.WARNING, "Wyj tek metody findByNameREST", ex); return new ResponseEntity<Collection<Restaurant>>(HttpStatus.INTERNAL_ SERVER_ERROR); } return restaurants.size() > 0 ? new ResponseEntity<Collection<Restaurant>> (restaurants, HttpStatus.OK): new ResponseEntity<Collection<Restaurant>> (HttpStatus.NO_CONTENT); }
/** * Pobiera restauracj dla zadanego ID. * <code>http://…/v1/restaurants/{restaurant_id}</code> zwróci restauracj o podanym ID.
Poleć książkęKup książkę
Rozdzia 4. • Implementujemy mikrous ug
81
* * @param restaurant_id * @return Obiekt restauracji. */ @RequestMapping(value = "/{restaurant_id}", method = RequestMethod.GET) public ResponseEntity<Entity> findById(@PathVariable("restaurant_id") String id) { logger.info(String.format("Wywo anie restaurant-service findById():{} dla {} ", restaurantService.getClass().getName(), id)); id = id.trim(); Entity restaurant; try { restaurant = restaurantService.findById(id); } catch (Exception ex) { logger.log(Level.SEVERE, "Wyj tek w wywo aniu findById REST", ex); return new ResponseEntity<Entity>(HttpStatus.INTERNAL_SERVER_ERROR); } return restaurant != null ? new ResponseEntity<Entity>(restaurant, HttpStatus.OK): new ResponseEntity<Entity>(HttpStatus.NO_CONTENT); } /** * Dodaje restauracj na podstawie okre lonych informacji. * * @param Restauracja * @return Restauracja (bez warto ci null) * @throws RestaurantNotFoundException Je li nie uda o si znale restauracji. */ @RequestMapping(method = RequestMethod.POST) public ResponseEntity<Restaurant> add(@RequestBody RestaurantVO restaurantVO) { logger.info(String.format("Wywo anie restaurant-service add(): %s dla %s", restaurantService.getClass().getName(), restaurantVO.getName()); Restaurant restaurant = new Restaurant(null, null, null); BeanUtils.copyProperties(restaurantVO, restaurant); try { restaurantService.add(restaurant); } catch (Exception ex) { logger.log(Level.WARNING, "Wyj tek w wywo aniu metody add Restaurant REST "+ ex); return new ResponseEntity<Restaurant>(HttpStatus.UNPROCESSABLE_ENTITY); } return new ResponseEntity<Restaurant>(HttpStatus.CREATED); }}
Klasy us ugKlasa RestaurantController wykorzystuje interfejs RestaurantService, który wprowadza ope-racje typu CRUD i przeszukiwanie, zgodnie z poni sz deklaracj :
public interface RestaurantService { public void add(Restaurant restaurant) throws Exception; public void update(Restaurant restaurant) throws Exception; public void delete(String id) throws Exception; public Entity findById(String restaurantId) throws Exception;
Poleć książkęKup książkę
Mikrous ugi w Javie. Poradnik eksperta
82
public Collection<Restaurant> findByName(String name) throws Exception; public Collection<Restaurant> findByCriteria(Map<String, ArrayList<String>> name) throws Exception; }
Teraz mo emy zaimplementowa us ug zgodnie z powy szym interfejsem. Dziedziczy onarównie po klasie BaseService, utworzonej w poprzednim rozdziale. Skorzystamy z adnotacji@Service, aby zosta a utworzona us uga:
@Service("restaurantService") public class RestaurantServiceImpl extends BaseService<Restaurant, String> implements RestaurantService { private RestaurantRepository<Restaurant, String> restaurantRepository; @Autowired public RestaurantServiceImpl(RestaurantRepository<Restaurant, String> restaurantRepository) { super(restaurantRepository); this.restaurantRepository = restaurantRepository; } public void add(Restaurant restaurant) throws Exception { if (restaurant.getName() == null || "".equals(restaurant.getName())) { throw new Exception("Nazwa restauracji nie mo e mie warto ci null ani pustej nazwy"); } if (restaurantRepository.containsName(restaurant.getName())) { throw new Exception(String.format("Istnieje ju restauracja o tej nazwie: - %s", restaurant.getName())); } super.add(restaurant); } @Override public Collection<Restaurant> findByName(String name) throws Exception { return restaurantRepository.findByName(name); } @Override public void update(Restaurant restaurant) throws Exception { restaurantRepository.update(restaurant); } @Override public void delete(String id) throws Exception { restaurantRepository.remove(id); } @Override public Entity findById(String restaurantId) throws Exception { return restaurantRepository.get(restaurantId); } @Override public Collection<Restaurant> findByCriteria(Map<String, ArrayList<String>> name) throws Exception { throw new UnsupportedOperationException("Metoda nie zosta a zaimplementowana. "); // Aby zmieni tre generowanych metod, wybierz opcj Tools/Templates. }}
Poleć książkęKup książkę
Rozdzia 4. • Implementujemy mikrous ug
83
Klasy repozytoriumInterfejs RestaurantRepository definiuje dwie nowe metody: containsName i findByName.Dziedziczy on tak e po interfejsie Repository:
public interface RestaurantRepository<Restaurant, String> extends Repository<Restaurant, String> { boolean containsName(String name) throws Exception; Collection<Restaurant> findByName(String name) throws Exception; }
Interfejs Repository wprowadza trzy nowe metody: add, remove i update. Dziedziczy on tak epo interfejsie ReadOnlyRepository:
public interface Repository<TE, T> extends ReadOnlyRepository<TE, T> { void add(TE entity); void remove(T id); void update(TE entity);}
Definicja interfejsu ReadOnlyRepository zawiera metody get i getAll, które zwracaj warto cilogiczne, encj i kolekcj encji. Ma to sens, gdy chcesz udost pni jedynie mechanizmy tylkodo odczytu:
public interface ReadOnlyRepository<TE, T> { boolean contains(T id); Entity get(T id); Collection<TE> getAll();}
Framework Spring pozwala na zastosowanie adnotacji @Repository do wskazywania klasyziarna, która pe ni funkcj repozytorium. W przypadku klasy RestaurantRepository stosujemymap (s ownik), która zosta a u yta w miejscu bazy danych. W ten sposób wszystkie encje sprzechowywane w pami ci. W zwi zku z tym po uruchomieniu us ugi w pami ci b d tylkodwie restauracje. Mo emy skorzysta z technologii JPA jako metody utrwalania danych w baziedanych. Tak na ogó post puje si w aplikacjach produkcyjnych:
@Repository("restaurantRepository") public class InMemRestaurantRepository implements RestaurantRepository<Restaurant, String> { private Map<String, Restaurant> entities; public InMemRestaurantRepository() { entities = new HashMap(); Restaurant restaurant = new Restaurant("Restauracja z burgerami","1", null); entities.put("1", restaurant); restaurant = new Restaurant("Restauracja burgerowa", "2", null); entities.put("2", restaurant); } @Override public boolean containsName(String name) {
Poleć książkęKup książkę
Mikrous ugi w Javie. Poradnik eksperta
84
try { return this.findByName(name).size() > 0; } catch (Exception ex) { //Obs uga wyj tków } return false; } @Override public void add(Restaurant entity) { entities.put(entity.getId(), entity); } @Override public void remove(String id) { if (entities.containsKey(id)) { entities.remove(id); } } @Override public void update(Restaurant entity) { if (entities.containsKey(entity.getId())) { entities.put(entity.getId(), entity); } } @Override public Collection<Restaurant> findByName(String name) throws Exception { Collection<Restaurant> restaurants = new ArrayList(); int noOfChars = name.length(); entities.forEach((k, v) -> { if (v.getName().toLowerCase().contains(name.subSequence(0, noOfChars))) { restaurants.add(v); } }); return restaurants; } @Override public boolean contains(String id) { throw new UnsupportedOperationException("Metoda nie zosta a zaimplementowana"); // Aby zmieni tre generowanych metod, wybierz opcj Tools/Templates. } @Override public Entity get(String id) { return entities.get(id); } @Override public Collection<Restaurant> getAll() { return entities.values(); }}
Poleć książkęKup książkę
Rozdzia 4. • Implementujemy mikrous ug
85
Klasy encjiEncja Restaurant, która dziedziczy po klasie BaseEntity, ma nast puj c definicj :
public class Restaurant extends BaseEntity<String> { private List<Table> tables = new ArrayList<>(); public Restaurant(String name, String id, List<Table> tables) { super(id, name); this.tables = tables; } public void setTables(List<Table> tables) { this.tables = tables; } public List<Table> getTables() {
return tables; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(String.format("id: {}, nazwa: {}, liczba miejsc: {}", this.getId(), this.getName(), this.getCapacity())); return sb.toString(); }}
Skoro w definicjach klas korzystamy z klas POJO, nie musimy tworzy wielu obiektów warto ci. Trzebatylko pami ta , aby nie modyfikowa stanu encji.
Encja Table dziedziczy po encji BaseEntity:
public class Table extends BaseEntity<BigInteger> { private int capacity; public Table(String name, BigInteger id, int capacity) { super(id, name); this.capacity = capacity; } public void setCapacity(int capacity) { this.capacity = capacity; } public int getCapacity() { return capacity; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(String.format("id: {}, nazwa: {}", this.getId(),this.getName())); sb.append(String.format("Stoliki: {}" + Arrays.asList(this.getTables()))); return sb.toString(); } }
Poleć książkęKup książkę
Mikrous ugi w Javie. Poradnik eksperta
86
Tre klasy abstrakcyjnej Entity jest przedstawiona poni ej:
public abstract class Entity<T> { T id; String name; public T getId() { return id; } public void setId(T id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
Klasa abstrakcyjna BaseEntity jest zdefiniowana w poni szy sposób. Dziedziczy ona po klasieEntity:
public abstract class BaseEntity<T> extends Entity<T> { private T id; private boolean isModified; private String name; public BaseEntity(T id, String name) { this.id = id; this.name = name; } public T getId() { return id; } public void setId(T id) { this.id = id; } public boolean isIsModified() { return isModified; } public void setIsModified(boolean isModified) { this.isModified = isModified; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
Poleć książkęKup książkę
Rozdzia 4. • Implementujemy mikrous ug
87
Us ugi u ytkowników i rezerwacjiImplementacja RestaurantService stanowi podstaw do dalszej pracy nad implementacj us ugBooking i User. Us uga User mo e udost pnia ko cówk zwi zan z operacjami typu CRUDdla u ytkowników, za us uga Booking, poza operacjami typu CRUD, mo e weryfikowa do-st pno stolików. Ca y kod ród owy znajdziesz na serwerze FTP wydawnictwa Helion.
Rejestracja i wykrywanie us ug (us uga Eureka)Framework Spring Cloud oferuje wzorcowe wsparcie dla us ugi Netflix Eureka, rejestru us ugi narz dzia do ich wykrywania. Wszystkie us ugi, które uruchamiasz, s do czane do us ugiEureka i mog by przez ni wykrywane. Dokonuje si to dzi ki konfiguracji klienta us ugiEureka w projekcie us ugi.
Najpierw musimy doda zale no frameworka Spring Cloud w pliku pom.xml i klas startowwraz z adnotacj @EnableEurekaApplication:
Zale no Mavena: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency>
Klasa startowa:Klasa startowa App wywo a automatycznie us ug Eureka tylko i wy cznie dzi ki adnotacji@EnableEurekaApplication:
package com.packtpub.mmj.eureka.service;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication@EnableEurekaServerpublic class App { public static void main(String[] args) { SpringApplication.run(App.class, args); }}
Mo esz te skorzysta ze znacznika <start-class>com.packtpub.mmj.eureka.service.App</start-class> w znaczniku <properties> w pliku pom.xml.
Poleć książkęKup książkę
Mikrous ugi w Javie. Poradnik eksperta
88
Konfiguracja Spring:Us uga Eureka wymaga dodania niezb dnej konfiguracji serwerowej do pliku src/main/resources/application.yml:
server: port: ${vcap.application.port:8761} # port HTTPeureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false server: waitTimeInMsWhenSyncEmpty: 0
Ka da z us ug systemu OTRS powinna zawiera konfiguracj klienta Eureka, dzi ki czemumo na nawi za po czenie pomi dzy klientem a serwerem Eureka. Bez tego nie b d mo -liwe wykrywanie i rejestracja us ug.
Klient Eureka: wszystkie Twoje us ugi powinny zawiera nast puj c sekcj konfiguracyjn :
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
WykonanieAby sprawdzi nasz kod w praktyce, musisz go najpierw zbudowa . W tym celu wykonamypolecenie clean package dost pne w Mavenie, co doprowadzi do zbudowania archiwum.
Aby uruchomi archiwum z us ug , wykonaj poni sze polecenie:
java -jar target/<plik_uslugi_jar>
Na przyk ad:
java -jar target/restaurant-service.jarjava -jar target/eureka-service.jar
TestowanieAby móc korzysta z testów jednostkowych, dodaj poni sz zale no do pliku pom.xml:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId></dependency>
Poleć książkęKup książkę
Rozdzia 4. • Implementujemy mikrous ug
89
Przetestowanie klasy RestaurantController wymaga dodania nast puj cych plików: Klasa RestaurantControllerIntegrationTests, która wykorzystuje adnotacj@SpringApplicationConfiguration, aby zastosowa t sam konfiguracj , co Spring Boot:
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = RestaurantApp.class) public class RestaurantControllerIntegrationTests extends AbstractRestaurantControllerTests { }
Abstrakcyjna klasa, w której napiszemy nasze testy:
public abstract class AbstractRestaurantControllerTests { protected static final String RESTAURANT = "1"; protected static final String RESTAURANT_NAME = "Restauracja Test"; @Autowired RestaurantController restaurantController; @Test public void validResturantById() { Logger.getGlobal().info("Start testu validResturantById"); ResponseEntity<Entity> restaurant = restaurantController.findById(RESTAURANT); Assert.assertEquals(HttpStatus.OK, restaurant.getStatusCode()); Assert.assertTrue(restaurant.hasBody()); Assert.assertNotNull(restaurant.getBody()); Assert.assertEquals(RESTAURANT, restaurant.getBody().getId()); Assert.assertEquals(RESTAURANT_NAME, restaurant.getBody().getName()); Logger.getGlobal().info("Koniec testu validResturantById"); } @Test public void validResturantByName() { Logger.getGlobal().info("Start testu validResturantByName"); ResponseEntity<Collection<Restaurant>> restaurants =restaurantController. findByName(RESTAURANT_NAME); Logger.getGlobal().info("Wewn trz testu validAccount"); Assert.assertEquals(HttpStatus.OK, restaurants.getStatusCode()); Assert.assertTrue(restaurants.hasBody()); Assert.assertNotNull(restaurants.getBody()); Assert.assertFalse(restaurants.getBody().isEmpty()); Restaurant restaurant = (Restaurant) restaurants.getBody().toArray()[0]; Assert.assertEquals(RESTAURANT, restaurant.getId()); Assert.assertEquals(RESTAURANT_NAME, restaurant.getName()); Logger.getGlobal().info("Koniec testu validResturantByName"); } @Test public void validAdd() { Logger.getGlobal().info("Start testu validAdd"); RestaurantVO restaurant = new RestaurantVO(); restaurant.setId("999"); restaurant.setName("Test Restaurant"); ResponseEntity<Restaurant> restaurants = restaurantController.add(restaurant); Assert.assertEquals(HttpStatus.CREATED, restaurants.getStatusCode()); Logger.getGlobal().info("Koniec testu validAdd"); }}
Poleć książkęKup książkę
Mikrous ugi w Javie. Poradnik eksperta
90
Na zako czenie tworzymy klas RestaurantControllerTests, która dziedziczypo utworzonej przed chwil abstrakcyjnej klasie, a tak e tworzy obiekty typówRestaurantService i RestaurantRepository:
public class RestaurantControllerTests extends AbstractRestaurantControllerTests { protected static final Restaurant restaurantStaticInstance = new Restaurant(RESTAURANT, RESTAURANT_NAME, null); protected static class TestRestaurantRepository implements RestaurantRepository<Restaurant, String> { private Map<String, Restaurant> entities; public TestRestaurantRepository() { entities = new HashMap(); Restaurant restaurant = new Restaurant("Restauracja Test", "1", null); entities.put("1", restaurant); restaurant = new Restaurant("Test restauracja", "2", null); entities.put("2", restaurant); } @Override public boolean containsName(String name) { try { return this.findByName(name).size() > 0; } catch (Exception ex) { // Obs uga wyj tku } return false; } @Override public void add(Restaurant entity) { entities.put(entity.getId(), entity); } @Override public void remove(String id) { if (entities.containsKey(id)) { entities.remove(id); } } @Override public void update(Restaurant entity) { if (entities.containsKey(entity.getId())) { entities.put(entity.getId(), entity); } } @Override public Collection<Restaurant> findByName(String name) throws Exception { Collection<Restaurant> restaurants = new ArrayList(); int noOfChars = name.length(); entities.forEach((k, v) -> { if (v.getName().toLowerCase().contains(name.subSequence(0, noOfChars))) { restaurants.add(v); } });
Poleć książkęKup książkę
Rozdzia 4. • Implementujemy mikrous ug
91
return restaurants; } @Override public boolean contains(String id) { throw new UnsupportedOperationException("Metoda nie zosta a zaimplementowana."); // Aby zmieni tre generowanych metod, wybierz opcj Tools/Templates. } @Override public Entity get(String id) { return entities.get(id); } @Override public Collection<Restaurant> getAll() { return entities.values(); } } protected TestRestaurantRepository testRestaurantRepository =new TestRestaurantRepository(); protected RestaurantService restaurantService = new RestaurantServiceImpl(testRestaurantRepository); @Before public void setup() { restaurantController = new RestaurantController(restaurantService); }}
ród a Bhakti Mehta, REST. Najlepsze praktyki i wzorce w j zyku Java, Helion, Gliwice 2015 Spring Cloud: http://cloud.spring.io Netflix Eureka: https://github.com/netflix/eureka
PodsumowanieW tym rozdziale zapozna e si z praktycznym zastosowaniem projektu sterowanego modelemdziedziny w implementacji mikrous ugi. Po uruchomieniu demonstracyjnej aplikacji wiesz ju ,jak tworzy , wdra a i testowa mikrous ugi niezale nie. Z pewno ci jeste w stanie tworzymikrous ugi za pomoc Spring Cloud. Dowiedzia e si tak e, jak zastosowa us ug Eureka,aby rejestrowa i wykrywa mikrous ugi dzi ki technologii Spring Cloud.
W nast pnym rozdziale dowiesz si , jak wdra a mikrous ugi w kontenerach, takich jak Docker.Nauczysz si tak e testowa mikrous ugi za pomoc klientów typu REST pisanych w Javiei innych narz dzi.
Poleć książkęKup książkę
Mikrous ugi w Javie. Poradnik eksperta
92
Poleć książkęKup książkę
Skorowidz
Aadnotacja
@ComponentScan, 39@Configuration, 38@Controller, 35, 79@EnableAutoConfiguration, 38@EnableCircuitBreaker, 101@EnableDiscoveryClient, 98@EnableEurekaApplication, 87@EnableWebMvc, 38@EnableZuulProxy, 98@HystrixCommand, 101@PathVariable, 36@Repository, 83@RequestMapping, 35@RequestParam, 36@ResponseBody, 35, 79@RestController, 35@SpringBootApplication, 38
agregat, 58, 59Amazon, 17, 51Amazon Machine Image, 193Amazon Web Services, 193AMI, 193Aminator, 194AMQP, 103AngularJS, 150, 151, 152
dyrektywa, 154zakres, 153
Ant, 30Apache Cassandra, 93
Apache Mesos, 198API, 20
brama, Patrz: brama APImatematyczne, 34wersja, 80
API gateway, Patrz: brama APIaplikacja
agentowa, 126agentowe, 127implementacja, 185jednostronicowa, 154, 155monolityczna, Patrz: architektura
monolitycznanatywna, 126, 127produkcyjna, 83publiczna, 127webowa, 126
strona domowa, 155Archaius, 197architektura
bezkontenerowa, 30mikrous ug, 17, 93, 186, 187, 191, 207monolityczna, 17, 18, 21, 186, 188, 207
kod, 23metodyka zwinna, 22skalowalno , 20wdra anie, 21, 22z us ugami, 18
wielowarstwowa, 54zorientowana na us ugi, Patrz: SOA
artefakt, 25, 55atak brute force, 129Atlas, 195
Poleć książkęKup książkę
Skorowidz
212
autoryzacja, 119, 120AWS, 193
Bbaza danych, 18, 60, 76, 78, 191, 203
wspó dzielenie, 192zarz dzanie, Patrz: MDM
biblioteka, 55Angular, 151Netflix Spectator, 195
boot2docker, 27Bower, 177brama API, 19
CCamel, 192certyfikat, 119, 120classpath, Patrz: cie ka klasCloud Foundtry, 194Cockcroft Adrian, 16, 190CRUD, 76, 81
DDDD, 51, 52, 53, 57, 68, 75, 188destylacja, 63, 68Docker, 25, 26, 106, 202
architektura, 27daemon, 27dziennik, 202dziennik obrazu, 115klient, 27kontener, 28
zale ny, 114zarz dzanie, Patrz: Docker Composeczenie z Mavenem, 107, 108, 110, 113
mened er kontenerów, Patrz: DockerCompose
obraz, 28, 113, 114rejestr lokalny, 114uruchamianie, 27
Docker Compose, 113, 115dziennik, 202
Docker Hub, 27Docker Toolbox, 106DOM, 151Domain-Driven Design, Patrz: DDDdostawca, 152
drzewo dokumentu, Patrz: DOMdyrektywa links, 114dziennik logów, 201
EeBay, 17Edda, 196, 197Elasticsearch, 203, 204encja, 55, 56, 57, 76, 77, 83, 124
implementacja, 69kolekcja, 83korze , Patrz: korzeprzechowywanie w pami ci, 83
Enterprise Service Bus, Patrz: ESBESB, 16Etsy, 20Eureka, Patrz: Netflix EurekaEvans Eric, 52
Ffabryka, 61FeignClient, 95Fenzo, 198FIDO, 191, 198, 199Fielding Roy, 35filtr, 153, 166format
jar, 31JSON, 78
formularz, 171wyszukiwania, 167
funkcjaMath.pow, 35Math.sqrt, 35
GGancarz Mike, 16, 187Google Computer Engine, 194Gradle, 30, 47grant
danych uwierzytelniaj cych klienta, 130, 137has a w a ciciela zasobu, 130, 135, 136, 146kodu autoryzacji, 130, 142niejawny, 130, 134, 145uprawnie klienckich, 146
Groupon, 17
Poleć książkęKup książkę
Skorowidz
213
Hhistogram czasu odpowiedzi, 190historyjka u ytkownika, 22HTTP, 117, 194
nag ówek, 80HTTPS, 118Hudson, 65Hystrix, Patrz: Netflix HystrixHystrix Dashboard, 94
IIce, 198identyfikator, 56integracja ci g a, 63, 64, 65Interface Segregation Principle, Patrz: ISPinterfejs
cname, 26DiscoveryEnabledNIWSServerList, 95IPing, 95j dra systemu operacyjnego, 26u ytkownika, 20, 23, 27, 54
invariant, Patrz: niezmiennikISP, 69
Jj dro wspó dzielone, 63, 66Jenkins, 24, 188Jenkins CI, 65j zyk modelowania zunifikowany, Patrz: UML
KKibana, 204, 206klasa
BaseEntity, 85DiscoveryClient, 95Entity, 86POJO, 85resource, 35startowa, 87cie ka, Patrz: cie ka klas
klientidentyfikator, 128poufny, 125profil, 126
publiczny, 125uwierzytelnienie, 128
klucz, 33dost powy, 125g ówny, 56magazyn, Patrz: magazyn kluczyobcego, 59
kodscalanie, 65testowanie, 65
kolejka komunikatów, 103kontekst, 64
mapa, Patrz: mapa kontekstuograniczenie, 63, 64
kontener, 25, 106Docker, Patrz: Dockerintermodalny, 25oprogramowania, 25zale ny, 114
kontroler, 150, 153, 164, 165REST, 35
ko cówka, 78, 129, 159autoryzacji, 129prefiks v1, 80przekierowania, 129tokena, 129wywo anie, 207
korze , 59
Llatencja, 190logika
aplikacji, 18, 55, 150biznesowa, 18, 55, 150
logowanie, 120, 122, 169, 170, 191rejestrowanie zdarze , 191
Logstash, 203, 205Long Josh, 31
Mmagazyn kluczy, 33, 119magistrala us ug korporacyjna, Patrz: ESBma pa
Chaos, 196Conformity, 196Janitor, 196Security, 196
Poleć książkęKup książkę
Skorowidz
214
mapa kontekstu, 63, 65Master Data Management, Patrz: MDMmaszyna wirtualna, Patrz: VM
Javy, Patrz: JVMMaven, 29, 30, 33, 39, 47, 87, 88, 103, 105, 107,
108, 110, 113metoda
awaryjna, 102config, 152fabryka, 153get, 83GET, 78getAll, 83getLocalServiceInstance, 95main, 34, 151POST, 78run, 152sqrt, 37sta a, 152us uga, 153warto , 152
middleware, Patrz: oprogramowaniepo rednicz ce
mikrous uga, 16, 17, 18, 20, 187, Patrz te : us ugadebugowanie, 207granice transakcji, 192monitorowanie, 190, 191
w czasie rzeczywistym, 191skalowanie, 20, Patrz te : skalowanietestowanie, 22, 23, 24tworzenie, 24, 75, 76, 193wdra anie, 21, 22, 23, 24, 93
Docker, 25, 28wielko , 187zale no cykliczna, 207, 208
model, 150dziedziny, 52, 57, 69, 78
implementacja, 52integralno , 63
korporacyjny, 63refaktoring, 64widoku, 150
modu , 63, 151MVC, 150MVVM, 150
Nnanous uga, 187NetBeans, 45, 46, 47NetBeans IDE, 29Netflix, 23, 93Netflix Atlas, 191, 195Netflix Edda, 196, 197Netflix Eureka, 76, 87, 88, 94, 194Netflix Hystrix, 94, 101, 102, 103, 194Netflix Nebula, 193Netflix OSS, 193Netflix Ribbon, 94, 95, 194Netflix Spectator, 195Netflix Turbine, 94, 103, 105niezmiennik, 59Node.js, 172, 177npm, 172, 177
OOAuth, 120
grant autoryzacji, Patrz: grantimplementacja, 138ko cówka, 129specyfikacja, 122wersja, 121zastosowania, 121
obiektcykl ycia, 58, 60dziedziny, 60, 79kolekcja, 59repozytorium, 78separacja, 63specjalizowany, 152us ug, 57usuwanie, 59warto ci, 56, 57, 77
Object-Oriented Programming, Patrz: OOPobs uga b dów, 102ograniczenie, 59OOP, 57Open Source Software Center, Patrz: OSSoprogramowanie po rednicz ce, 16OSS, 93
Poleć książkęKup książkę
Skorowidz
215
Pplik
app.js, 159, 167application.yml, 95, 98, 107index.html, 151, 156JAR, 33, 34pom.xml, 25, 31, 87, 88, 108
podmodel, 63POJO, 34, 85polecenie
clean package, 88logs, 202mvn clean, 40
Postman, 40Postman Chrome, 40potokowanie, 203programowanie
sterowane testami, Patrz: TDDzorientowane obiektowo, Patrz: OOP
projektowanie sterowane modelem dziedziny,Patrz: DDD
protokóSSL, Patrz: SSLAMQP, Patrz: AMQPHTTP, 34, Patrz: HTTPSecure Socket Layer, Patrz: SSLSOAP, Patrz: SOAPSSL, 33TCP, 194TLS, Patrz: TLSTransport Layer Security, Patrz: TLSUDP, 194
przestrze nazw, 26Pujals Tony, 17
QQuora, 120
logowanie, 122, 125
RRabbitMQ, 103regu a segregacji interfejsów, Patrz: ISPrejestr us ug, 76, 87repozytorium, 60, 78
artifacts, 25implementacja, 70
REST, 35, Patrz te : us uga RESTRestTemplate, 95Ribbon, Patrz: Netflix Ribbonrównowa enie obci enia, 94, 95
po stronie klienta, 95po stronie serwera, 98
SScumblr, 191, 198Security Monkey, 191, 198, Patrz te : ma paService-Oriented Architecture, Patrz: SOAserwer
Apache Tomcat, 30, 33autoryzacji, 124, 125, 128, 129Eureka, 95graniczny, 98, 99, 159, 195Jetty, 30, 33po rednicz cy, 98, 195proxy, Patrz: serwer po rednicz cywirtualizowany, 106zasobów, 124
Simian Army, 195skalowanie
dwuwymiarowe, 20jednowymiarowe, 20platformowe, 20produktu, 20
sniffer, 117SOA, 16, 187SOAP, 16SPA, 154, 155Spinnaker, 193, 194Spring, 83Spring Boot, 29, 30
konfiguracja, 30wersja, 31
Spring Cloud, 77, 87, 94, 98, 193klient, 95
Spring Cloud Ribbon, 95Spring Initializer, 30Spring Security, 138SSL, 118, 119stos ELK, 202
Elasticsearch, 203, 204Kibana, 204, 206konfiguracja, 204Logstash, 203, 205
system plików, 60
Poleć książkęKup książkę
Skorowidz
216
cie kaklas, 33niezale na, 63, 67URI, 36
TTeamCity, 24, 65, 188technologia
AngularJS, Patrz: AngularJSApache Cassandra, Patrz: Apache CassandraJPA, Patrz: JPANode.js, Patrz: Node.js
testend-to-end, 151, 189, 190integracyjny, 111, 189jednostkowy, 88, 151, 190
TLS, 118, 129token, 124
dost powy, 124, 129, 131ko cówka, Patrz: ko cówka tokenaod wie enia, 124uwierzytelniania, 131
trasowanie, 154
UUI, Patrz: interfejs u ytkownikaUI-Router, 154UML, 53, 65Unified Model Language, Patrz: UMLus uga, 77, Patrz te : mikrous uga
$injector, 152$log, 152Docker Hub, 113dzia aj ca transakcyjnie, 192implementacja, 72Monkey, Patrz: ma paotwartego hosta, 63, 68rejestr, Patrz: rejestr us ugREST, 21, 30, 34, 55, 78, 189
ko cówka, Patrz: ko cówkatestowanie, 30
tworzenie, 58, 68, 161uwierzytelnienie, 119, 120, 169u ytkownik ko cowy, 124
VValue Object, Patrz: obiekt warto ciVector, 197VirtualBox, 27, 106VM, 25VO, Patrz: obiekt warto ci
Wwarstwa
aplikacji, 54, 55, 58biznesowa, 58DAO, 18dziedziny, 54, 55, 58infrastruktury, 54, 55ograniczaj ca przek amania, 63, 67prezentacji, 18, 54, 150
widok, 150wstrzykiwanie zale no ci, 152wy cznik automatyczny, 101wyra enie regularne, 37wzorzec
fabryki, 62fasady, 67klient-dostawca, 63, 66konformisty, 63, 67projektowy
MVC, Patrz: MVCMVVM, Patrz: MVVM
wstrzykiwania zale no ci, 152Wy cznik Automatyczny, 101
ZZuul Server, 94, 98, 119, 195zwi zek, 59
danie GET, 34, 35
Poleć książkęKup książkę