Wpis z mikrobloga

#programowanie #mikroserwisy

Czy i gdzie powinny być walidowane dane pomiędzy mikroserwisami?

Uczę się pisząc apkę (MERN i takie tam), z założenia architektura oparta o mikroserwisy. Pytanie moje brzmi - tak ogólnie czy i gdzie powinny być walidowane dane przesyłane w wiadomościach pomiędzy mikroserwisami?

W moim przypadku jeden mikroserwis A to UI, gdzie użytkownik wprowadza dane, i powiedzmy na razie jeden mikroserwis B który odpowiada za jakąś część logiki biznesowej ze swoją bazą danych realizując CRUD'a. Teraz jak użytkownik wprowadza te dane, to najpierw A je waliduje i przygotowuje,a potem one są wysyłane za pośrednictwem brokera do B. I teraz czy mikroserwis B powinien po swojej stronie sprawdzać poprawność danych czy nie musi ich sprawdzać i powinien im wierzyć że jako dane wewnętrzne są ok, bo np. testy sprawdzają że dane generowane przez A ok?

Co mówi na ten temat dobra praktyka? Sprawdzać czy tego nie robić bo to nadmierne asekuranctwo?
  • 9
a gdybyś miał napisać testy do poprawności danych. Niepoprawne przypadki byś gdzie testował? W A czy B czy A i B?


@kobrys13: Hm, no bym testami sprawdzał co wychodzi z A. Po głębszym namyśle także to co wchodzi do B z brokera.
B musi to robić, A może (dodatkowo) to robić.

Miałem bardziej rozpisany komentarz z uzasadnieniem ale jakiś kretyn umieścił przycisk "dodaj komentarz" w tym samym miejscu co "wyślij komentarz" i mi zginął przy próbie wysłania ( ͡° ʖ̯ ͡°) a drugi raz mi się nie chce pisać

@wykop wstydu nie macie tak długo tego nie poprawiać
@Wegrzynski: Dane powinny być zawsze weryfikowane.
Poza tym nie zawsze jesteś w stanie dokonać pełnej walidacji bez np. sięgania do bazy (np. sprawdzając unikalność wartości) więc lepiej zrobić walidację w serwisie B i zwracać błędy do A, który potem wyśle je do klienta.
Więc zrób walidację wstępną w A (poprawność wartości, długość, brak pustych itp.).
A w B zrób pełną walidację.
@Wegrzynski: w sumie ten twój mikroserwis to architektura restowa, i powinieneś sprawdzać na 3 poziomach. Frontend (UX friendly jest instant feedback, że email nie jest w formacie, data jest zła itp). Dalej na poziomie API (kontroler/serwis, gdzie tam framework każe) i zwrócić co jeszcze nie pasuje backendowi, jeśli nie pasuje. No i trzeci poziom to baza, bo nie chcesz (bardzo nie chcesz) mieć złych danych w bazie.
@Wegrzynski: pamiętaj że zawsze może pojawić się inny mikroserwis który będzie wysyłał wiadomości do brokera, co jeśli ten mikroserwis będzie mieć błąd i dane będą błędne? Albo ktoś będzie chciał ręcznie coś do brokera wysłać? Dobrze jest sprawdzać to co przychodzi z brokera i jak nie pasuje to sobie to wypisać do logów żeby łatwo to wychwycić