PocketBase:一體化的開源 Go 語言實時後端
PocketBase 是一個開源的實時後端解決方案,採用單一文件的形式進行分發。它由嵌入式數據庫 (SQLite) 和實時訂閱功能組成,提供了開箱即用的文件和用戶管理功能、方便的管理儀表板 UI 以及簡單的 REST 風格 API。本文將深入探討 PocketBase 的功能、安裝、示例代碼和一些高級的應用技巧。
主要特性
嵌入式數據庫
PocketBase 內嵌 SQLite 數據庫,這意味着所有數據存儲都可以無縫集成在一個文件中,便於管理和遷移。此外,SQLite 的查詢能力和性能也爲 PocketBase 提供了堅實的基礎。
實時訂閱
PocketBase 提供原生的實時訂閱功能,允許客戶端即時收到數據更新的通知。這對於需要實時同步數據的應用場景,比如聊天應用、協作工具等,極爲有用。
用戶和文件管理
用戶管理和文件管理是許多應用必不可少的部分。PocketBase 提供了內置的用戶認證和授權機制,以及文件上傳、存儲和管理功能,使開發者能夠快速構建安全、可靠的後端服務。
便捷的管理儀表板 UI
PocketBase 還提供了一個直觀的管理儀表板 UI,使得數據管理與監控變得簡單方便。無論是查看數據庫表數據、管理用戶,還是上傳文件,您都可以通過界面輕鬆完成。
簡單的 REST 風格 API
PocketBase 的 REST 風格 API 使得開發者可以輕鬆進行數據操作,不論是創建、讀取、更新還是刪除數據,均可以通過標準化的 API 調用完成。
安裝與使用
獨立應用
PocketBase 可以作爲獨立應用運行。首先,你可以從 Releases 頁面 下載適合你平臺的預構建可執行文件。下載解壓後,運行以下命令啓動服務:
./pocketbase serve
作爲 Go 框架 / 工具包使用
如果你希望將 PocketBase 作爲 Go 庫來開發自定義業務邏輯,可以按照以下步驟進行配置。
創建一個新的項目目錄,並在目錄中創建 main.go 文件:
package main
import (
"log"
"net/http"
"github.com/labstack/echo/v5"
"github.com/pocketbase/pocketbase"
"github.com/pocketbase/pocketbase/apis"
"github.com/pocketbase/pocketbase/core"
)
func main() {
app := pocketbase.New()
app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
e.Router.AddRoute(echo.Route{
Method: http.MethodGet,
Path: "/hello",
Handler: func(c echo.Context) error {
return c.String(http.StatusOK, "Hello world!")
},
Middlewares: []echo.MiddlewareFunc{
apis.ActivityLogger(app),
},
})
return nil
})
if err := app.Start(); err != nil {
log.Fatal(err)
}
}
初始化依賴:
go mod init myapp && go mod tidy
啓動應用:
go run main.go serve
構建靜態鏈接可執行文件:
CGO_ENABLED=0 go build
./myapp serve
關於 CGO 的說明
PocketBase 內嵌了 SQLite,但並不需要啓用 CGO。如果啓用 CGO,它將使用 mattn/go-sqlite3 驅動,否則使用 modernc.org/sqlite。除非你確實需要提高讀寫查詢性能,否則不建議啓用 CGO,以簡化跨平臺編譯的複雜性。
構建與運行示例
要構建一個最小的獨立可執行文件,可以按照以下步驟操作:
-
安裝 Go 1.21+(如果尚未安裝)
-
克隆或下載 PocketBase 倉庫
-
進入
examples/base目錄 -
運行以下命令構建可執行文件:
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build
./base serve
注意,目前純 Go SQLite 驅動支持的構建目標包括:
-
darwin amd64
-
darwin arm64
-
freebsd amd64
-
freebsd arm64
-
linux 386
-
linux amd64
-
linux arm
-
linux arm64
-
linux ppc64le
-
linux riscv64
-
linux s390x
-
windows amd64
-
windows arm64
測試
PocketBase 提供了單元測試與集成測試混合的測試套件。運行以下命令來執行測試:
go test ./...
安全性
如果發現 PocketBase 存在安全漏洞,請發送郵件至 support@pocketbase.io。所有報告將被及時處理,並給予報告者應有的榮譽。
貢獻
PocketBase 是一個開源項目,使用 MIT 許可證,你可以自由使用,甚至將其作爲商業服務提供。你可以通過以下方式幫助繼續開發:
-
貢獻源碼
-
提出新功能建議和報告問題
非常歡迎爲新的 OAuth2 提供者,bug 修復,代碼優化和文檔改進的 PR,但請避免在未討論過實現細節的情況下提交新功能的 PR。PocketBase 有其開發路線圖,因此這些未經討論的 PR 常常會打亂開發節奏。
結論
PocketBase 作爲一個開源的實時後端解決方案,不僅功能強大且簡單易用,特別適合中小型項目的快速開發。無論你是需要一個簡單的獨立後端,還是打算在現有項目中集成 PocketBase 的功能,它都能靈活應對。隨着社區的不斷貢獻和發展,PocketBase 有望成爲一個更加完善和穩定的後端解決方案。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/yyqhfWSLx3jfq5E1UrqoQQ