PocketBase:轻量级 Go 后端框架入门指南
什么是 PocketBase?
PocketBase 是一个开源的后端框架,使用 Go 语言编写,旨在为开发者提供快速构建 Web 和移动应用后端的能力。它最大的特点是开箱即用,内置了数据库、实时订阅、文件存储、用户认证等核心功能,无需复杂的配置即可启动一个功能完整的后端服务。
核心特性
1. 内置 SQLite 数据库
PocketBase 使用 SQLite 作为默认数据库,这意味着: - 无需单独安装数据库服务 - 单文件存储,便于备份和迁移 - 支持完整的 SQL 查询功能
2. 实时数据订阅
通过 WebSocket 提供实时数据更新功能:
// 客户端可以订阅数据变化
pb.collection('posts').subscribe('*', (data) => {
console.log('实时更新:', data)
})
3. 完整的用户认证系统
- 用户注册/登录
- 邮箱验证
- 密码重置
- OAuth2 集成
4. 文件存储管理
- 支持本地和 S3 兼容存储
- 图片自动优化和缩略图生成
- 文件访问权限控制
快速开始示例
安装 PocketBase
# 下载最新版本 wget https://github.com/pocketbase/pocketbase/releases/download/v0.10.3/pocketbase_0.10.3_linux_amd64.zip # 解压并运行 unzip pocketbase_0.10.3_linux_amd64.zip ./pocketbase serve
创建第一个 API 端点
创建 main.go:
package main
import (
"log"
"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 {
// 创建 GET /api/hello 端点
e.Router.GET("/api/hello", func(c echo.Context) error {
return c.JSON(200, map[string]string{
"message": "Hello from PocketBase!",
})
}, apis.ActivityLogger(app))
return nil
})
if err := app.Start(); err != nil {
log.Fatal(err)
}
}
数据模型定义
通过 PocketBase 管理界面或 API 创建集合(相当于数据库表):
# 使用 API 创建 posts 集合
curl -X POST http://localhost:8090/api/collections \
-H "Content-Type: application/json" \
-d '{
"name": "posts",
"type": "base",
"schema": [
{
"name": "title",
"type": "text",
"required": true
},
{
"name": "content",
"type": "editor"
},
{
"name": "published",
"type": "bool",
"default": false
}
]
}'
客户端使用示例
JavaScript 客户端:
import PocketBase from 'pocketbase'
const pb = new PocketBase('http://127.0.0.1:8090')
// 用户认证
await pb.collection('users').authWithPassword(
'user@example.com',
'password123'
)
// 创建记录
const record = await pb.collection('posts').create({
title: 'Hello World',
content: 'My first post',
published: true
})
// 查询数据
const result = await pb.collection('posts').getList(1, 20, {
filter: 'published = true',
sort: '-created'
})
实际应用场景
1. 快速原型开发
对于需要快速验证想法的项目,PocketBase 可以在几分钟内搭建出完整的后端服务,包括用户系统、数据存储和 API。
2. 小型应用后端
适合博客系统、任务管理工具、小型电商平台等不需要复杂业务逻辑的应用。
3. 移动应用后端
配合 Flutter、React Native 等移动框架,快速构建应用后端服务。
4. 内部工具开发
为企业内部工具提供轻量级的数据存储和用户管理功能。
高级功能
自定义钩子(Hooks)
app.OnRecordBeforeCreateRequest("posts").Add(func(e *core.RecordCreateEvent) error {
// 在创建记录前执行
e.Record.Set("created_by", e.HttpContext.Get("user_id"))
return nil
})
app.OnRecordAfterCreateRequest("posts").Add(func(e *core.RecordCreateEvent) error {
// 在创建记录后执行
log.Printf("New post created: %s", e.Record.Id)
return nil
})
文件处理中间件
app.OnFileDownloadRequest().Add(func(e *core.FileDownloadEvent) error {
// 控制文件下载权限
if !isUserAllowed(e.HttpContext) {
return apis.NewForbiddenError("Access denied")
}
return nil
})
部署选项
PocketBase 支持多种部署方式:
- 单机部署:直接运行二进制文件
- Docker 部署:
FROM alpine:latest COPY pocketbase /usr/local/bin/pocketbase EXPOSE 8090 CMD ["pocketbase", "serve", "--http=0.0.0.0:8090"]
- 云平台部署:支持部署到 Railway、Render、Fly.io 等平台
性能考虑
- 单实例可处理数千并发请求
- 内存占用小(通常 < 50MB)
- 适合中小型应用,对于超大规模应用建议使用分布式架构
学习资源
- 官方文档:https://pocketbase.io/docs
- GitHub 仓库:https://github.com/pocketbase/pocketbase
- 示例项目:官方提供多个示例应用
- 社区支持:活跃的 Discord 社区
总结
PocketBase 为 Go 开发者提供了一个极简而强大的后端解决方案。它特别适合: - 需要快速启动项目的开发者 - 前端开发者想要一个完整的后端服务 - 小型到中型应用的后端需求 - 学习和原型开发
通过减少配置和基础设施的复杂性,PocketBase 让开发者能够更专注于业务逻辑的实现,大大提高了开发效率。无论是个人项目还是小型团队,PocketBase 都是一个值得尝试的优秀选择。




还没有评论,来说两句吧...