Wybór zestawu technologii, który będzie odpowiadał potrzebom Twojej aplikacji jest kluczowy. Mimo, że do stworzenia aplikacji backendowej można użyć praktycznie dowolnego języka programowania, niektóre z nich ułatwią rozpoczęcie pracy, inne zaś ułatwią jej utrzymanie. Więc który zestaw wybraliśmy?
Backend
Stworzenie solidnego, szybkiego i bezpiecznego backendu jest jedną z najważniejszych części tworzenia aplikacji internetowych. Większość (jeśli nie całość) logiki i obliczeń jest wykonywana po stronie serwera.
Scala
W GoodSoft używamy języka Scala do prawie wszystkich naszych backendów. Dla naszego przypadku użycia, jego kluczowe cechy to:
- Typowanie statyczne
- Style OOP i FP
- Ogromna ilość bibliotek
- Wspaniała społeczność i dokumentacja
Pierwszy z nich oszczędza nam sporo czasu, ponieważ większość błędów można wyłapać podczas kompilacji. Nie musimy zgadywać jaki typ zostanie zwrócony lub jawnie sprawdzać czy jakaś zmienna jest tym czym powinna być.
Połączenie stylów programowania obiektowego i funkcjonalnego pozwala nam na modelowanie naszych systemów za pomocą obiektów i wykonywanie obliczeń przy użyciu paradygmatów funkcjonalnych. Drugi z nich znacznie ułatwia debugowanie metod, gdyż wynik powinien zależeć tylko od przekazanych argumentów, a nie jakichś ukrytych stanów.
Scala nie tylko posiada własne biblioteki first party, ale ponieważ działa na JVM i kompiluje się do kodu bajtowego, może korzystać ze wszystkich bibliotek Javy. Daje nam to ogromne możliwości przy szukaniu rozwiązań.
PlayFramework
Ponieważ budujemy backendowe aplikacje serwerowe, potrzebujemy jakiejś formy webowego frameworka. PlayFramework to framework oparty na Scali, który dostarcza wszystkich niezbędnych narzędzi do tworzenia aplikacji internetowych. Jest to projekt Open Source stworzony przez Lightbend i jego społeczność. Jego kluczowe cechy to łatwość użycia – wykorzystuje konwencję nad konfiguracją, pozwala na przeładowywanie kodu na gorąco podczas rozwoju i jest w pełni bezstanowy. Ta ostatnia część jest ważna. Pomaga w tworzeniu łatwo skalowalnych aplikacji. Kolejną kluczową cechą jest wsparcie dla asynchronicznych operacji I/O. Dzięki temu możemy przetwarzać i obsługiwać długie żądania bez blokowania wątków HTTP.
Data access and database
Naszą bazą danych jest PostgreSQL. Używamy jej ze względu na szybkie prędkości odczytu i zapisu oraz świetną obsługę skomplikowanych zapytań SQL.
Aby uprościć dostęp do bazy danych w naszych aplikacjach serwerowych, używamy Quill. Jest to biblioteka, która pozwala nam pisać kod w Scali, aby uzyskać dostęp do danych. Kolejnym ważnym aspektem korzystania z Quill jest możliwość całkowitego przełączania baz danych. W przyszłości moglibyśmy migrować dane do innych silników, a Quill powinien obsłużyć wszystko za nas.
Frontend
Dla większości naszych projektów nie tworzymy osobnej aplikacji frontendowej z frameworkiem JavaScript. Najczęściej używamy szablonów Play z kombinacją Bootstrap do stylizacji i czystego JS lub JQuery do dodatkowych operacji po stronie klienta.
Deployment
Każda aplikacja, którą tworzymy jest inna. Niektóre mogą wymagać przechowywania ogromnych ilości plików, inne muszą działać na małym serwerze w biurze klienta. Z tego powodu wdrażamy do wielu różnych środowisk, takich jak AWS czy VPS.