Jak zamockować usłguę na miesiąc

Jak zamockować usłguę na miesiąc
LE
  • Rejestracja:ponad rok
  • Ostatnio:ponad rok
  • Postów:3
0

Hej

Robię sobie własny projekt - klona Allegro. Na razie mam mirkoserwis z userami, potrzebuję aby w tym serwisie mi strzelało po listę z produktami usera.
Nie mam jeszcze mikroserwisu z produktami, potrzebuję na jakiś miesiąc zrobić sobie mocka danych i zwracać dane z niego.

Jest jakiś wzorzec jak to robić? Jakaś biblioteka ułatwiająca to?
Że w sensie mam endpoint /users/{id}/products, jest serwis który będzie potem strzelał po te produkty, ale na razie ma czytać z jakieś listy np. z JSONa albo YAMLa.

To ważne chcę wystartować w nowym roku, a mnie to blokuje

W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:2 minuty
  • Postów:3563
0

Użyć mocka zewnętrznego, albo napisać samemu prosty serwer.

LE
  • Rejestracja:ponad rok
  • Ostatnio:ponad rok
  • Postów:3
0

Co to znaczy użyć mocka zewnętrznego?

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 15 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
0

Zamockuj usługę na zawsze - a po miesiącu wyłącz. Simple as f... :)

RequiredNickname
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 4 godziny
  • Postów:616
1

Robisz np. porty i adaptery i zamiast realnej implementacji portu w której będzie docelowo klient http do komunikacji z innym serwisem robisz implementację in memory.

Btw pamiętaj, że monolith first ;)

edytowany 1x, ostatnio: RequiredNickname
LE
  • Rejestracja:ponad rok
  • Ostatnio:ponad rok
  • Postów:3
0

Jak dam Wam link do projektu na GitHubie, to zrobicie pull requesta?

Uśpiony wiosenny but
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 12 godzin
  • Postów:444
0

napisz sobie w implementacji jakiś proxy, który w zależności np od jakiegoś configu albo braku np bazy pod spodem czy coś zwraca ci proxy w miejsce prawidziwych danych i tyle

RequiredNickname
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 4 godziny
  • Postów:616
3

mi za pull requesty płacą :P A na poważnie to ports and adapters to niejako całą architektura więc musiałbym Ci pół aplikacji przepisać.

Jeżeli nie chcesz tak daleko idących zmian to idź na skróty: w aplikacji zamiast konfigurować bean springowy z realnym klientem http (masz do niego interfejs prawda?) zrób drugą implementację in memory bez żadnej komunikacji po sieci. Tylko tyle...

Uśpiony wiosenny but
+1 to albo jakiś jeśli jest już napisany serwis pod zwracanie pod repo ale nie dokonczony to dodac proxy ktore ma agregat w postaci tego serwisu albo mockuje metody serwisu, ktore potem sa wolane w controllerach np.
RequiredNickname
Ja bym dla prostoty zrobił dwie implementacje interfejsu i w zależności on np. profilu z jakim jest uruchamiana aplikacja ładował tęz klientem http lub in memory. Łatwo to potem wywalić.
Uśpiony wiosenny but
yup też bym tak zrobił :)
K5
  • Rejestracja:około 6 lat
  • Ostatnio:7 minut
  • Postów:1002
0

A czemu akurat na miesiąc?

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:35 minut
  • Lokalizacja:Laska, z Polski
  • Postów:10059
1

Kolejny, który myśli że umie pisać mikroserwisy.

SE
Post godny moderatora :D
Riddle
@Seken: Tłumaczyłem to już w wielu postach wcześniej. Mikroserwisy to jest bardzo niezrozumiane pojęcie w IT. Żeby coś można było nazwać mikroserwisem, to muszą być niezależnie deployowalne, niezależnie testowalne, fail jednego nie może powodować faila drugiego (nawet jeśli padnie całkiem), muszą być bardzo luźno ze sobą związane, przepisanie go powinno być możliwe i łatwe. Tymczasem to co 99% początkujących określa jako "mikroserwis" to są po po prostu dwie apki w docker-compose które gadają po HTTP (i nie spełniają tych kryteriów), i nawet nie stały obok mikroserwisów.
SE
@Riddle: Ja to wiem i zupelnie sie z Toba zgadzam, ale ta wiadomosc w niczym nie pomogla, a byla jedynie uszczypliwa.
Riddle
@Seken: W sumie racja. Może powinienem podlinkować jeden z moich poprzednich postów.
SL
  • Rejestracja:około 7 lat
  • Ostatnio:około 14 godzin
  • Postów:879
0

Możesz postawić jakiegoś gotowca jak wiremock, możesz napisać ad hoc serwis w jakimkolwiek języku przy użyciu prostego frameworka HTTP. Wybacz, ale to są proste sprawy i jak tego nie ogarniasz to i pewnie z mikroserwisami będzie problem. Jak chcesz szybkiego rozwiązania to napisz wszystko w jednym serwisie. Mikroserwisy przydają się, gdy:

  • są jakieś przesłanki techniczne np. słaba wydajność jakiegoś kawałka kodu, który zabija wydajność czegoś zupełnie niezwiązanego albo możliwość pisania różnych części systemu w różnych technologiach
  • organizacyjne: masz mnóstwo ludzi i chcesz, żeby każdy mógł rozwijać swoje poletko z dużą niezależnością

Klepiąc klona allegro w pojedynkę te problemy cię nie dotyczą

MY
  • Rejestracja:prawie 5 lat
  • Ostatnio:5 miesięcy
  • Postów:24
0

Podpowiem, że mikroserwis z userami to antypattern

QB
User ID i tak będzie w majkroserwisie produktowym, więc to produktowy majkroserwis będzie wołany przez frontend żeby pozyskać produkty usera.
RequiredNickname
Frontend może uderzać do swojego dedykowanego backendu, ten backend może uderzać pod spodem po dane usera (np. na podstawie jakiegoś jego id), po podobne dane (lub zupełnie inne ale mimo wszystko w kontekście usera) mogą uderzać inne aplikacje. Jak dla mnie to nie wyjaśniłeś na czym ma polegać ten antypattern lub jestem za głupi by z jednego zdania wywnioskować.
QB
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Lublin
  • Postów:171
0

Zrób sobie monolit a potem myśl o rozbijaniu na "microserwisy".
Jak będziesz w przyszłości widział trend, że pewna część funkcjonalności potencjalnie będzie zażynać bazę (bo to zazwyczaj brak skalowalności bazy będzie problemem) albo potrzebuje innego podejścia do danych, to to wtedy sobie zrobisz migrację interesującej Cię części danych do nowej bazy / mikroserwisu.

Hinty:

  • jeśli rozwiązanie robisz na relacyjnej bazie danych, to nie rób PK/FK constraintów (bo rozumiem, że zakładasz, że projekt Ci tak urośnie, że data integrity nie będziesz w stanie utrzymać bo będziesz miał kiedyś wiele data source'ów)
  • projektuj moduły/dane tak, żeby można je było w miarę łatwo wynieść do osobnego serwisu

W ten sposób będziesz miał projekt, który jest tani w utrzymaniu (zużywa mało zasobów, czasu developmentu, nie trzeba pilnować update dependencies pierdyliarda repo etc...)

edytowany 5x, ostatnio: qbns
RequiredNickname
kojarzysz jakieś materiały dydaktyczne (tutoriale, repozytoria, książki itp) na temat tego jak dobrze robić modularne monolity?
Riddle
@RequiredNickname: Obejrzyj lekcje od Roberta Martina, jest ich 6x 1h (tutaj masz link: https://www.youtube.com/watch?v=7EmboKQH8lM&list=PLmmYSbUCWJ4x1GO839azG_BBw8rkh-zOj). Sporo sukcesu pochodzi od zmiany perspektywy i wyzbycia się złych nawyków niż z technologii.
QB
Ewolucja każdego projektu wygląda inaczej i dla mnie zawsze bardzo ważne w tym wszystkim jest to, co ten projekt robi, jak użytkownicy z niego korzystają oraz znajomość trendów. Wtedy spekulacje na temat tego jaki design modułów jest trafny a jaki bez sensu są z reguły trafniejsze. Wtedy wychodzi taki MIX biznesowo/technicznych modułów, gdzie "techniczne" są potencjalnie dostarczycielami funkcjonalności dla tych "biznesowych"
Riddle
@qbns: Są rzeczy które są niezmienne dla każdego projektu, jeśli ma być modularny. Jedną z takich rzeczy jest loose-coupling.
RequiredNickname
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 4 godziny
  • Postów:616
0

Fakt, modularny monolit dobrze jest umieć robić i o ile w pracy bym się tym kierował o tyle sam prywatnie również mam aplikacje które celowo są wydzielane do mikroserwisów (działa sobie w obrębie sieci lokalnej) tylko po to by ćwiczyć/testować technologie dedykowane stricte mikroserwisom (np. resilience4j, współdzielony między instancjami cache itp).

OL
  • Rejestracja:prawie 5 lat
  • Ostatnio:4 miesiące
  • Postów:28
2

W pracy oraz prywatnym projekcie korzystam z WireMock i sprawdza się bardzo fajnie. Klient jest oddzielnym beanem, przyjmuje kolejny bean, który jest Springowym ConfigurationProperties, który zawiera url serwisu. Na produkcji mamy poprawne adresy serwisów, a do testów profil testowy z propertiesami, które jako url podają wiremocka. No i później trzeba sobie zamockować response, albo w oddzielnym pliku albo bezpośrednio w kodzie. Wygodne i szybkie rozwiązanie.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)