PocketBase是一个开源的Go后端,包含以下特性:
- 嵌入式数据库(SQLite)支持实时订阅
- 内置文件和用户管理
- 便捷的管理仪表板界面
- 简单的REST风格API
有关文档和示例,请访问https://pocketbase.io/docs。
[!警告] 请注意,PocketBase仍在积极开发中, 因此在达到v1.0.0版本之前不能保证完全向后兼容。
API SDK客户端
与API交互最简单的方式是使用官方SDK客户端之一:
- JavaScript - pocketbase/js-sdk (浏览器和Node.js)
- Dart - pocketbase/dart-sdk (Web、移动端、桌面端)
概述
作为独立应用使用
您可以从发布页面下载适用于您平台的预构建可执行文件。
下载后,解压缩文件并在解压目录中运行./pocketbase serve
。
预构建的可执行文件基于examples/base/main.go
文件,默认启用了JS VM插件,允许使用JavaScript扩展PocketBase(有关详细信息,请参阅使用JavaScript扩展)。
作为Go框架/工具包使用
PocketBase作为常规Go库包分发,允许您构建自己的自定义应用程序特定业务逻辑,同时最终得到一个可移植的单一可执行文件。
以下是一个最小示例:
-
安装Go 1.21+(如果尚未安装)
-
创建一个新的项目目录,并在其中创建以下
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 { // 在应用路由器(echo)中添加新的"GET /hello"路由 e.Router.AddRoute(echo.Route{ Method: http.MethodGet, Path: "/hello", Handler: func(c echo.Context) error { return c.String(200, "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
启动创建的可执行文件。
[!注意] PocketBase嵌入了SQLite,但不需要CGO。
如果启用CGO(即
CGO_ENABLED=1
),它将使用mattn/go-sqlite3驱动程序,否则使用modernc.org/sqlite。 只有在真正需要以牺牲交叉编译复杂性为代价来提高读/写查询性能时才启用CGO。
有关更多详细信息,请参阅使用Go扩展。
构建和运行仓库main.go示例
要构建最小的独立可执行文件(类似于发布页面中的预构建文件),您可以在examples/base
目录中简单地运行go build
:
- 安装Go 1.21+(如果尚未安装)
- 克隆/下载仓库
- 导航到
examples/base
- 运行
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build
(_https://go.dev/doc/install/source#environment_) - 通过运行
./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
命令:
go test ./...
另请查看测试指南,了解如何编写自己的自定义应用程序测试。
安全
如果您在PocketBase中发现安全漏洞,请发送电子邮件至support at pocketbase.io。
所有报告都将得到及时处理,您将得到相应的认可。
贡献
PocketBase是根据MIT许可证授权的免费开源项目。 您可以自由地使用它,甚至可以将其作为付费服务提供。
您可以通过以下方式帮助继续其开发:
欢迎提交新的OAuth2提供商、错误修复、代码优化和文档改进的PR。
但请避免在没有事先讨论实现细节的情况下为_新功能_创建PR。 PocketBase有一个路线图,我尝试按特定顺序处理问题,这样的PR往往会突然出现,扰乱了最初的规划,导致繁琐的来回沟通。
如果我关闭了您的PR,即使它执行良好且经过测试,也不要沮丧。这并不意味着它永远不会被合并。 当时机成熟时,我们可以随时参考它并/或在处理该问题时采用您实现的部分内容(不用担心,您会在发布说明中得到认可)。