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,以簡化跨平臺編譯的複雜性。

構建與運行示例

要構建一個最小的獨立可執行文件,可以按照以下步驟操作:

  1. 安裝 Go 1.21+(如果尚未安裝)

  2. 克隆或下載 PocketBase 倉庫

  3. 進入 examples/base 目錄

  4. 運行以下命令構建可執行文件:

GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build
./base serve

注意,目前純 Go SQLite 驅動支持的構建目標包括:

測試

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