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, iż 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żeli 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żeli 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żeli 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żeli ten wpis Ci się podobał, to daj komentarz, odpowiednią ilość gwiazdek, cobym wiedział, jaki jest odbiór tego wpisu.
A jeżeli interesuje Cię bieda-programowanie, to popełniłem już wcześniej jeden wpis o Lambdach dla ubogich.
Pax