Szybki start w świecie SaaS

Jakub Celewicz

Odkryj nowe horyzonty technologiczne: świąteczny przewodnik po innowacyjnych projektach i frameworkach

Czas między świętami a nowym rokiem to zazwyczaj spokojniejszy okres w projektach IT, więc jest to też dobry moment na samorozwój i/lub skan internetu pod kątem nowych, ciekawych rozwiązań i technologii. A jeżeli pracujesz w ConnectPoint, jest to wymarzony moment, aby przeznaczyć te kilka dni na samorozwój (z puli 20, które mamy rocznie na ten cel do dyspozycji).
Przedmiotem mojego zainteresowania stały się rozwiązania (półgotowce), które umożliwiają nam szybkie wystartowanie projektu. Kryterium, które przyjąłem na początku, miało uwzględniać przede wszystkim funkcjonalności uniwersalne, wymagane w każdym projekcie,  takie jak m.in. autoryzacja, zarządzanie rolami użytkownika, integracja (np. płatności, CMS) oraz inne użyteczne opcje, które można by wykorzystać. Do finału przeszły dwa projekty:

1) ScaffoldHub – ciekawy starter dla aplikacji webowych stworzony w całości w oparciu o framework NextJS,

2) SaaS Boilerplate – starter dla aplikacji SaaS stworzony i wspierany przez firmę apptension

ScaffoldHub

Główną zaletą tego projektu jest minimalizm technologiczny – użycie jednego i (wydaje się) już sprawdzonego frameworka, jakim jest NextJS, gwarantuje szybkie wdrożenie się
w kod oraz łatwiejsze utrzymanie w przyszłości. Po zainstalowaniu lokalnie i inicjacji lokalnej bazy danych (Postgres) aplikacja uruchamia się z błędem w konsoli, dotyczącym konfiguracji ORM Prisma. Mimo to aplikacja uruchamia się w przeglądarce i wszystko wydaje się działać poprawnie.
Ciekawą cechą tego rozwiązania jest generator modelu bazodanowego, który w błyskawiczny sposób pozwala na stworzenie podstawowej struktury bazy danych:

Generator traktowałem jako ciekawy dodatek, umożliwiający szybkie generowanie/aktualizacje modelu. Wynikiem działania generatora jest plik json, który może być eksportowany i współdzielony z innymi użytkownikami.
Po dłuższych testach zauważyłem, że NextJS bardzo często przebudowywał pliki i “zamulał”. Czasami potrzeba było kilka sekund, zanim aplikacja była w stanie wyświetlić cokolwiek. Nie znalazłem żadnych ustawień, które mogłyby zawęzić ten proces do wskazanych lub tylko zmienionych plików.
Struktura plików w projekcie oraz organizacja kodu wyglądały całkiem rozsądnie i pozwalały w łatwy sposób poruszać się po jego funkcjonalnościach:

Przy dalszych testach (dodawaniu nowych encji relacji, nowych pól do istniejącego modelu) oraz obsłudze formularzy w panelu administracyjnym napotkałem kilka błędów w konsoli “controlled vs uncontrolled”, związanych z nieprawidłową obsługą stanu  edytowanych pól formularzy.
Podsumowując: projekt zrobił na mnie dobre wrażenie, ale nie do końca mogłem przekonać się do frameworka NextJS, po części w związku z częstym przebudowywaniem się plików związanym z technologią SSR. Zgodnie z informacją na stronie wystąpiłem o zwrot kosztów, który przysługuje do 7 dni od zakupu. Pieniądze zostały zwrócone w ciągu godziny.

SaaS Boilerplate

Projekt instalujemy bezpośrednio z poziomu npm – od jakiegoś czasu dostępny jest całkowicie za darmo. Instalacja jest bardzo prosta, a w razie problemów do dyspozycji jest bardzo dobra dokumentacja. W trakcie instalacji CLI z poziomu konsoli prosi nas o podanie (opcjonalnych) kluczy API do integracji z Google, Facebook, Stripe oraz Contentful CMS – można to zrobić później, edytując plik .env. Po instalacji i uruchomieniu widzimy ekran logowania:

Architektura aplikacji jest bardzo przemyślana i dzięki użyciu pnpm nie duplikujemy bibliotek pomiędzy frontendem i backendem. Mamy kilka predefiniowanych poleceń z poziomu pnpm do uruchamiania i migracji Postgresa. Wszystko działa bardzo sprawnie. Skonfigurowany jest codegen, dzięki któremu po migracji tworzymy i dostarczamy współdzielone typy między frontendem i backendem.
W ramach nauki rozbudowałem istniejący przykład CRUD o nowe pole. Poprawiłem też kod (błąd w paginacji itemów) z przykładu CRUD:

Nie programowałem wcześniej w Pythonie, ale projekt zachęcił mnie na tyle, żeby zacząć drążyć głębiej. Zainteresowałem się popularnym Django (struktura, endpointy i walidacja), potem przeszedłem do nauki Pythona stricte (obiekty i typy danych, funkcje w Pythonie, argumenty args kwargs, obiekty). 
Podsumowując: prosty przykład z CRUD bardzo mi się spodobał i zachęcił do nauki – jest tam wszystko, czego potrzeba. Atutami są: dobrze przemyślana architektura aplikacji, także pod kątem wydajności (wykorzystywana jest pamięć podręczna z GraphQL, pobierana jest tylko niezbędna ilość danych) i bardzo dobra dokumentacja całego projektu. Dostępny jest także kod dla deploymentu całej infrastruktury na Amazon. Sam Python, z którym wcześniej nie miałem do czynienia, nie wydaje się taki straszny. Patrząc na projekt na githubie: wydaje się on być na bieżąco wspierany i rozwijany przez kilkunastu deweloperów, a sama firma stojąca za projektem okazuje się być z… Poznania.

Podsumowanie

Oba projekty mają swoje zalety i wady, jednak każdy z nich może stanowić solidny punkt wyjścia dla deweloperów poszukujących efektywnych rozwiązań w szybkim prototypowaniu i rozwoju aplikacji w modelu SaaS. Moim celem było zainspirowanie się oraz “podejrzenie” architektury w już istniejącym i uznanym rozwiązaniu. Poświęcony czas zmotywował mnie do odświeżenia wiedzy z GraphQL. Pomimo braku doświadczenia z Pythonem moją uwagę i aplauz zdobył projekt SaaS Boilerplate. Gratuluję twórcom projektu i trzymam kciuki za dalszy jego rozwój.