Użyj PocketBase — zaplecza typu open source
Mówiąc dokładniej, kiedy powinieneś używać Pocketbase zamiast Firebase.
Ok, więc jesteś w takim momencie życia, w którym musisz zbudować produkt, który wymaga backendu. Teraz istnieje wiele sposobów rozwiązania problemu, takich jak zbudowanie go od zera lub wybranie backendu jako dostawcy usług, takiego jak Firebase (GCP), Amplify (AWS), Supabase (Open-source) lub nasz dzisiejszy temat PocketBase.
W artykule nie porównamy wszystkich dostawców backend-as-a-service (BaaS), ale skupimy się w szczególności na Firebase i Pocketbase i czego więcej można się spodziewać po tym artykule.
- Kiedy wybrać Firebase, a kiedy Pocketbase.
- Krótkie pojawienie się Pocketbase i sposobów na obejście tego
- Pocketbase jako framework.
- Wdrażanie Pocketbase.
- Wniosek
Baza ogniowa
„ Uczyń swoją aplikację najlepszą możliwą ”
Mam pozytywne doświadczenia z Firebase i z powodzeniem budowałem i sprzedawałem produkty z jego wykorzystaniem. Firebase to ogólnie niezawodna i wszechstronna platforma, która oferuje szereg przydatnych funkcji, w tym uwierzytelnianie, bazę danych NoSQL w czasie rzeczywistym, niestandardowe funkcje logiki biznesowej, przechowywanie plików i hosting. Ma również dobrze zaprojektowany pakiet SDK po stronie klienta. i nie można zapomnieć o łatwości rozpoczęcia pracy z Firebase, która wymaga tylko kilku kliknięć do skonfigurowania.
Jednym z ograniczeń Firebase jest to, że obecnie nie oferuje ona zaawansowanych zapytań agregujących, takich jak SUM czy AVG. Zespół Firebase niedawno wprowadził zapytanie COUNT, ale może to nie spełniać wszystkich wymagań dotyczących agregacji.
Jeśli twój przypadek użycia wymaga tych zapytań, użyj Pocketbase.
Innym problemem związanym z Firebase jest jego ograniczona rozszerzalność. Chociaż oferuje usługi, takie jak funkcje i rozszerzenia w chmurze, które pomagają wypełnić lukę, mogą one nie być tak elastyczne, jak rozszerzalność Pocketbase. Dla porównania, Pocketbase oferuje wyższy poziom dostosowywania i elastyczności do tworzenia niestandardowych interfejsów API i tras.
Jeśli Twój przypadek użycia wymaga większej rozszerzalności, np. integracji stron trzecich, niestandardowej logiki biznesowej, zgodności transakcji, wybierz Pocketbase.
Firestore, baza danych używana przez Firebase, jest zastrzeżoną platformą i nie zapewnia żadnych narzędzi do eksportowania ani importowania danych poza BigQuery. Może to utrudnić migrację danych do lub z Firestore, potencjalnie powodując problemy dla programistów.
Migracja danych ma najwyższy priorytet, gdy korzystasz z Pocketbase.
Baza kieszonkowa
„ Backend Open Source dla Twojej następnej aplikacji SaaS i Mobile w 1 pliku ” napisany w Go.
Rzeczy dostępne od ręki
- Baza danych czasu rzeczywistego obsługiwana przez wbudowany SQLite w trybie WAL.
- Uwierzytelnianie za pomocą poczty e-mail i OAuth2.
- Przechowywanie plików z S3.
- Klient SDK dla Dart i JavaScript.
Jeśli chcesz uzyskać bardziej dogłębne wrażenia z Pocketbase, możesz rozważyć użycie pockethost i wdrożenie go na fly.io. Umożliwi to pełne przetestowanie Pocketbase i zobaczenie, jak działa w rzeczywistym scenariuszu.
Prawdziwa moc
Polega na wykorzystaniu Pocketbase jako frameworka. W ten sposób możesz mieć wszystkie gadżety zawarte w pudełku i elastyczność, aby stworzyć coś własnego.
func main() {
app := pocketbase.New()
if err := app.Start(); err != nil {
log.Fatal(err)
}
}
Pocketbase wykonał wiele ciężkich prac, więc nie musisz pisać tak dużo kodu podczas korzystania z niego, co może ułatwić tworzenie niestandardowych rozszerzalnych interfejsów API.
Pozwól, że pokażę ci kilka przykładów.
Niestandardowa trasa interfejsu API
Zapytania agregujące nie są obsługiwane od razu, ale możemy napisać niestandardową trasę, w której możemy uruchomić własne zapytanie SQL. Pocketbase za sceną używa echo , więc podczas tworzenia niestandardowych tras możemy sprawdzić dokumentację echo .
// inside main
app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
e.Router.AddRoute(echo.Route{
Method: http.MethodGet,
Path: "/api/get_monthly_limit",
Handler: func(c echo.Context) error {
result := struct {
TotalLimit int `db:"totalLimit" json:"totalLimit"`
}{}
app.Dao().DB().Select("SUM(monthlyLimit) as totalLimit").From("categories").One(&result)
return c.JSON(http.StatusOK, result)
},
})
return nil
})
- Pierwsza linia to sposób, w jaki Pocketbase dodaje elementy do frameworka za pomocą
onBeforeServe - Po drugie, rzeczą, którą chcemy dodać, jest dodanie nowej trasy do routera echa
- Teraz nasza specyficzna implementacja zaczyna się od łatwego do naśladowania.
Możemy wysłać powiadomienie za pomocą Firebase Admin sdk dla Go .
Dwoma małymi krokami:
- Zainicjuj aplikację firebase
- Skonfiguruj niestandardową trasę lub haczyk, który znajdziesz tutaj .
// In the main
firebaseApp, err := initFirebaseApp()
func initFirebaseApp() (*firebase.App, error) {
opt := option.WithCredentialsFile("/etc/secret/service_account.json")
app, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
return nil, err
}
return app, nil
}
ctx := context.Background()
messagingClient, _ := firebaseApp.Messaging(ctx)
e.Router.AddRoute(echo.Route{
Method: http.MethodPost,
Path: "/api/send_notification",
Handler: func(c echo.Context) error {
token := c.FormValue("token")
message := &messaging.Message{
Token: token,
Notification: &messaging.Notification{
Title: "hello",
Body: "Golang",
},
}
response, err := messagingClient.Send(ctx, message)
if err != nil {
return c.String(http.StatusPreconditionFailed, "Something went wrong")
}
return c.String(http.StatusOK, response)
},
})
app.RootCmd.AddCommand(&cobra.Command{
Use: "fetch_something",
Run: func(command *cobra.Command, args []string) {
log.Println("Fetched something !")
},
})
Zastosowanie
Jeśli korzystasz tylko z dystrybucji Linuksa, możesz uruchomić go build main.go i zostanie wygenerowany plik wykonywalny. Po prostu skopiuj na serwer za pomocą scp lubrsync.
// in your local machine
scp $pathToYourExecutable root@$yourServerIP:/home/
// after ssh-ing to your server
/home/$yourExcutable serve
Jeśli jednak zamkniesz terminal SSH, Twój serwer również ulegnie awarii. Aby temu zapobiec, możesz skonfigurować usługę systemową, aby serwer działał w tle. Więcej informacji o tym, jak to zrobić, można znaleźć w oficjalnej dokumentacji .
Alternatywnie, jeśli używasz systemu Windows, możesz sklonować kod źródłowy na serwer, zbudować plik wykonywalny, a następnie uruchomić go za pomocą systemd i nginx. Aby to zrobić,
- Najpierw zainstaluj język programowania Go.
- Następnie możesz sklonować repozytorium i zbudować plik wykonywalny za pomocą kompilatora Go.
- Na koniec możesz skonfigurować systemd i nginx, aby serwer działał w tle z tą samą dokumentacją .
Pocketbase i Firebase to świetne narzędzia do szybkiego budowania i wdrażania minimalnego opłacalnego produktu lub testowania dopasowania produktu do rynku. Chociaż mogą być przydatne do szybkiego uruchomienia produktu, należy pamiętać, że mogą nie być najlepszym rozwiązaniem w przypadku długoterminowych projektów na dużą skalę. Jeśli Twoja aplikacja gwałtownie się rozwija, może być konieczne zbudowanie niestandardowego zaplecza od podstaw lub zatrudnienie kogoś, kto zrobi to za Ciebie.
Ważne jest, aby wybrać odpowiednie narzędzia do swojego projektu, a platformy BAAS, takie jak Pocketbase i Firebase, mogą być doskonałym wyborem, jeśli chodzi o szybkie rozpoczęcie pracy. Pamiętaj tylko, aby wziąć pod uwagę potencjał przyszłego wzrostu i możliwość migracji do niestandardowego zaplecza, jeśli to konieczne. Technologia to narzędzie, które pomoże Ci zbudować coś wartościowego, a wybór odpowiedniego rozwiązania należy do Ciebie
Jestem maniakiem technicznym, który lubi próbować nowych rzeczy i uczyć się dzielić tym ze światem. Jeśli masz jakieś sugestie lub napotkasz trudności, skontaktuj się z nami na Twitterze .
Do następnego razu.

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































