Aktywne Wpisy
wieszjo +2
O co chodzi z tym Patrykiem 2073? Że on nie chce do freakow wejść bo podobno są takie brudy na niego, ludzie mają podobno pozapisywane na dyskach jakieś rzeczy że to była by największą orka w internecie? XD
#famemma
#famemma
KarnetNaGlony +11
Na pewno zżygałem się doreklamówki ale co było potem
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 katalogupublic
. 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?