Wpis z mikrobloga

Ciąg dalszy mojej aplikacji Serverless: poprzedni wpis nie miał odzewu, ale w sumie nie wiem czy nie dlatego że namieszałem na początku trochę z tagami i usunąłem post i dodałem jeszcze raz. Może wykop nikogo nie zawołał bo myślał że spamuję... Mikroblog nie wygląda na zbyt dobrą platformę do prowadzenia, o ironio, mikrobloga...

No ale tak czy siak słowo się rzekło więc jeszcze jeden post na temat projektu Serverless.

Współczuję trochę juniorom w tej branży, żeby rozpocząć małą aplikację webową trzeba się strasznie narobić. Nawet nie chcę myśleć ile by to zajęło gdybym nie wiedział co robię. W ostatnich godzinach skupiłem się trochę na nauce rzeczy których do tej pory raczej nie znałem za dobrze - czyli sama Lambda, API Gateway i sam + szkielet aplikacji webowej od zera (zawodowo przychodziłem raczej na gotowe więc start od zera to zawsze nowość).

Historię zmian ze szczegółami można zobaczyć na githubie : https://github.com/sakfa/aws-serverless-ledger/commits/master

A bez szczegółów:
- Jako że Serverless to oczywiście ściema, do aplikacji webowej musi być serwer musiałem ogarnąć jak odpalać to na lokalu. Na początku myślałem że wrzucę moje statyczne pliki (index.html, itp.) po prostu na dysk i będę je otwierał przez file:///... na szczęście okazało się że można łatwiej - sam local start-api serwuje nie tylko Lambdy z szablonu CloudFormation ale też wszystkie pliki znajdujące się w katalogu public. Więc dodałem index.html (starter template z bootstrapa) w commicie nr 3.

- Następny krok: jako że nie wiedziałem co tak naprawdę moja Lambda dostaje na wejście od API Gateway w commicie 4 dodałem jedną prostą instrukcję - log(input). Do tego chciałem utrzymać test przy życiu więc dodałem TestContext. *Nienawidzę* mocków więc po prostu zrobiłem własną implementację interfejsu, logger zrzuca dane na konsolę.

- Dzięki zalogowaniu obiektu Input dowiedziałem się jak API Gateway przekazuje Lambdzie parametry. Z tą wiedzą w commicie 5 zparametryzowałem "hello world" tak żeby wypisało "hello $name" w zależności od przekazanego parametru. Mała rzecz ale przekazywanie parametrów z frontendu do backendu jest dość istotne więc chcę to ogarnąć wcześnie. Kod działa, ale jest obrzydliwy więc przejdźmy do kolejnego punku:

- Java ma swoje problemy, jednym z nich jest to że bardzo kiepsko obsługuje się w niej dynamiczne struktury (typu rekursywna mapa AKA np. json). Jako że chciało mi się rzygać jak pisałem ten kod dodałem bardzo fajną biblioteczkę (którą wygooglałem na poczekaniu, ale autorowi postawiłbym piwo) - Dynamics która pozwala łatwo pobierać klucze z takich map, obsługuje dobrze te które mogą nie istnieć i ma fajną metodę dget gdzie możemy używać znanej i lubianej notacji "klucz.podklucz.podpodklucz...". Nowy kod . Znacznie lepiej.

- I jak już zacząłem usuwać śmieciowy kod z projektu, w commicie 7 dodałem Gson, biblioteka do parsowania/tworzenia JSONa prosto od Google. Może i Lambda będzie trochę tłustsza ale nie mogę patrzeć na tworzenie JSONa metodą konkatenacji stringów no i w przyszłości będę zwracał bardziej skomplikowane struktury, nie chcę tracić czasu na debugowanie źle postawionych cudzysłowów. Jako też że wcześniej dodałem już Guavę wywaliłem obrzydliwy kod z szablonu który odczytywał String z danego URL jednolinijkowcem. Java jest verbose, to słuszna krytyka języka, ale należy pamiętać że nawet najbardziej paskudny kod można zastąpić one-linerem jeżeli napiszemy prostą metodę -> a dla podstawowych rzeczy ktoś już na pewno kiedyś to zrobił i wystarczy wpisać w Google "guava/apache commons read string from URL". Ta zmiana to sztuka dla sztuki, i tak niedługo ten kod usunę. Ale nie mogłem na niego patrzeć, więc go wywaliłem.

- kolejny commit to tylko moje notatki, będą przydatne jeżeli ktoś chciałby to powtórzyć bo notuję jak instalowałem niektóre narzędzia.

Mam jeszcze 3 commity w obwodzie ale to opiszę w innym poście bo już i tak jest za długi. Teraz jak już w miarę ogarniam z czym się je lambdę na backendzie, w następnych commitach skupiam się na frontendzie, który dla mnie jest raczej nowością.

#programowanie #sakfaserverless <- tag do subskrybowania/czarnolisto

Pisać dalej?

  • Tak 66.7% (14)
  • Nie 14.3% (3)
  • Usuń konto 19.0% (4)

Oddanych głosów: 21