Serverlesslessless… 0 (0)

Czy da się napisać taką apkę webową, która będzie działała w internecie bez kodu w backendzie? Oczywiście! Odpowiedź to serverless!

A czy da się za ten serverless nie płacić? Oczywiście – do jakiejś skali są darmowe plany, a w nich darmowe usługi.

Ale nie trzeba serverlessa – jest inna droga. W tym wpisie pokrótce opiszę prywatny projekcik realizujący tę nieserverlessową drogę.

Inspiracja

Prywatne projekty zwykle cierpią na nadmiar inspiracji i niedobór zasobów. Brakuje przede wszystkim zasobów ludzkich (1/16 etatu 1 osoby to raczej niewiele…). Budżet również jest ograniczony – najlepiej by wydatki ograniczyły się do liczby nieujemnej i niedodatniej jednocześnie (waluta obojętna)… Potencjał skalowania projektu również marny.

A jednak człowiek czasem coś by zakodził… Na przykład kolejny w internecie projekcik apki webowej do własnych przepisów kulinarnych. Albo do trzymania tekstów piosenek (lub akordów). Albo do zdjęć kapsli od piwa, ewentualnie znaczków pocztowych.

Niby dane niewrażliwe, a jednak nie chcemy, żeby ktoś oglądał nasze kapsle od piwa. Zatem jakieś uwierzytelnienie by się przydało. Jeszcze lepiej by było, gdybyśmy mogli również komuś udostępniać pewne dane. I aby się dało otworzyć wszędzie na świecie. I aby dało się łatwo administrować tymi danymi. A gdyby to wszystko było rozszerzalne, skalowalne i aby to jakoś wyglądało… I najważniejsze – żeby było za darmo!

Jak wiadomo – nie da się. Jednak podjąłem próbę i jestem z niej całkiem zadowolony 😉

Front end

W przypadku tego projektu założyłem, że aplikacja ma wyglądać nie najgorzej oraz ma być przyjazna urządzeniom mobilnym. Do tego celu wykorzystałem Ionic. Domyślnie pisze się w nim jak aplikacje webowe na Angulara, ale wsparcie obejmuje również Reacta i Vue.js. Co więcej, style są dopasowane do systemu operacyjnego – na Androidzie styl androidowy, a na iPhone’ie styl makowy.

W tym frameworku jest dostępnych wiele typowych komponentów i funkcjonalności typowych dla aplikacji mobilnych. Można z takiej aplikacji zrobić aplikację typowo mobilną oraz używać mnóstwa natywnych funkcjonalności poprzez używanie pluginów.

Skorzystałem zatem z predefiniowanych komponentów (List, Infinite Scroll, Floating Action Button, Modal, Refresher, Loader, Slides, Toasts) i z ich pomocą stworzyłem kolejną przeglądarkę, ogólnie mówiąc, systemu plików.

Podgląd plików oraz wyświetlanie ich treści ukryłem za pewną abstrakcją, przez co dodanie nowych wspieranych typów plików jest stosunkowo proste. A same wsparte typy danych ograniczyłem do plików Markdown oraz plików tekstowych. Jak będzie trzeba, to dodanie podglądacza plików przez dodanie 3 klas nie powinno być trudne.

Data source

Projekt miał być w miarę niezależny od użytego źródła danych, dlatego musiałem wydzielić pewną abstrakcję plików i folderów.

Pierwszym i aktualnie jedynym wpieranym typem systemów plików jest „repozytorium” na BitBuckecie.

Ma to pewne plusy – dostęp poprzez Restowe Api Bitbucketowe wymaga uwierzytelnienia w Bitbuckecie. Daje to możliwości ograniczenia dostępu do danych, ale również możliwość wpółdziałania z innymi osobami posiadającymi dostęp do projektu. Darmowe prywatne projekty są aktualnie do 5 osób. Jeśli takie repozytorium będzie przykładowo postawione na gitcie, to dostajemy w prezencie również historię repozytorium oraz jego audyt oraz możliwości PullRequestów. A jeśli bardzo się postaramy, to możemy przy commicie odpalać jakieś pipeline’y (do 50 minut na miesiąc free).

Oczywiście te same feature’y były by dostępne dla GitHuba, gdyż oferuje podobny zakres funkcjonalności. Były by dostępne, gdybym je zaimplementował 😉

A gdzie ten projekt?

Rzeczy jasna najtańszy hosting, to darmowy hosting 😉 Skorzystałem z dobrodziejstwa Github Pages, gdzie zdecydowałem się wrzucić demo aplikacji. Bierzcie i klikajcie.

Jeśli chcecie – zajrzyjcie na źródła. Jeśli chcecie się tym pobawić – forkujcie. W Readme powinno być w miarę ładnie opisane, co i jak.

Backlog

Pomysłów na rozwój jest mnóstwo, a zasobów żadnych 😉

Można by w przyszłości:

  • dodać wsparcie dla Api Githuba,
  • zrobić z tego apkę natywną,
  • dodać wsparcie nie tylko dla odczytów, ale także dla zapisów (nie tylko podgląd pliku, ale także edycja)
  • wpierać przeglądanie wielu plików jednocześnie (coś jak karty przeglądarki)
  • zaimplementować, testy jednostkowe 😉

Ale kto by miał na to czas…

Podsumowanie

Tak, wiem, znów strollowałem nagłówkiem, bo coś o serwerlessie, a tu w sumie wychodzi SaaS – serwis Bitbucketowy to chyba Software as a Service… a może Platform, bo w sumie Bitbucket wystawia API… Nie wiem, nie znam się, ale co po kodziłem, to moje 🙂

Wraz z tym projekcikiem kończą mi się zaległe tematy do opisania na blogu. Zatem w kolejnych wpisach mam nadzieję wróci Nasza Ukochana Java.

A jeśli ten wpis Ci się podobał, to daj komentarz, odpowiednią ilość gwiazdek, cobym wiedział, jaki jest odbiór tego wpisu.

A jeśli interesuje Cię bieda-programowanie, to popełniłem już wcześniej jeden wpis o Lambdach dla ubogich.

Pax