Pages

Saturday, 9 November 2024

使用 Pocketbase 作为评论后端的可能性并简单尝试嵌入 js

 PocketBase 是一个 Golang 写的的简单后端。下面验证一下 PocketBase 作为评论系统后端的可能性。

我使用的版本 PocketBase v0.17.1 ,在支持嵌入 js 之后,PocketBase 可以更加简单方便的自定义各种需要的功能。

|PocketBase 创建数据结构

评论系统建议配置好 OAuth2.0 和邮箱,PocketBase 支持的登录方式还是很多的。配置完成之后,调用提供的 js SDK 其中的登陆方法,会自动在 users 新建账户 ,并且绑定登录的方式,如 Github 。这些新建的账户并不能登录进入 Admin web UI ,是给普通用户使用的,需要自己写前端。
使用 Admin 账户登录,新建 collection ,我这里取名 dis 。以下是表的结构。
第一行是主要内容,最好限制一个长度,er 代表发布人,关系选择 users 表,replay 代表回复的评论。内容和发布人都不可以为空,回复则可以为空。
下面配置 API 访问规则:
text
1List/Search 为空
2View 为空
3Create: @request.auth.id != "" && @request.auth.id = er.id  && text != ""
4Update: @request.auth.id = er.id
5Delete: @request.auth.id = er.id
这其中代表的含义是列出和查看,不需要任何的权限。而创建则需要使用一个账户进行创建并且字段中 er 代表的创建者的账户和请求者的账户 id 需要相同,并且新创建的文字并不能为空。更新和删除都需要请求 id 和字段中 er 代表的创建者的账户相同。

|PocketBase 嵌入 js

文档 https://pocketbase.io/docs/js-overview
创建一个回复之后我们还需要的功能就是给被回复的人发送一个邮件提醒。在 Pocketbase 运行目录下创建 pb_hooks/main.pb.js
javascript
这段代码的功能就是监测 dis Collection , 如果回复了某一个消息,在创建完成后触发该函数,找到需要发送邮件的用户 id ,然后获取用户的 email ,然后调用内置的邮件发送功能进行提醒。

|简单前端使用

外面贴一个我当时测试使用的代码。并没有详细的每一步进行测试。只是基本验证了登录显示等功能,发送邮件我是在 admin web上测试的。
ts

|结论

基本软件在作为评论系统的可行性。然而实际上评论系统并不缺好用的方案,如 Artalk - 轻量、安全、易上手的自托管评论系统 ,或者是使用 Github Issues 。不过也算是在一定程度上可以快速搭建评论系统的前后端,而且自己写嵌入 js 脚本确实也挺方便的。
------------------------------------------------

轻量级开源的GO语言实时后端解决方案:PocketBase 

PocketBase 是开源实时后端服务,具有轻量、内嵌 SQLite 数据库、文件与用户管理模块、管理仪表板和 REST 风格 API 等功能。其数据库支持实时订阅、事务等。虽有创新功能,但使用中或遇向后兼容及性能问题,可通过关注更新和采取优化措施缓解。欢迎分享使用问题和功能提议。软件地址、协议、语言占比等信息也有介绍。

PocketBase:一站式后端服务,简化开发。

概览

PocketBase是一个开源的实时后端服务,专为需要快速部署和轻量级解决方案的开发者设计。它的核心是一个内嵌的SQLite数据库,这个数据库不仅提供了数据存储功能,还具备了实时数据订阅的特性,使得开发者能够即时接收到数据更新。这种实时性对于构建需要快速响应用户交互的应用程序至关重要。

除了数据库功能,PocketBase还集成了文件管理和用户管理模块。文件管理允许开发者轻松处理应用程序中的文件上传和存储需求,而用户管理系统则简化了用户认证和权限控制的复杂性。这两个模块的结合,为构建具有用户交互功能的应用程序提供了坚实的基础。

PocketBase还提供了一个直观的管理仪表板和REST风格的API。管理仪表板的界面设计简洁,使得即使是非技术背景的用户也能轻松进行后端管理。而REST API的设计遵循了现代Web开发的最佳实践,使得前端开发者可以无缝地与后端进行交互,无需深入了解底层的实现细节。这种设计哲学贯穿了PocketBase的整个架构,使其成为一个易于使用且功能全面的后端解决方案。

主要功能

你可以在线体验:pocketbase.io/demo username/password:test@example.com/123456

你可以进入官网浏览更多:pocketbase.io/docs

  • 嵌入式数据库

PocketBase的嵌入式数据库基于SQLite,它不仅为应用程序提供了一个轻量级的数据存储解决方案,而且通过实时数据订阅功能,允许前端应用即时接收数据库变更通知。这种订阅机制基于WebSocket,确保了即使在大量数据交互的情况下,用户界面也能保持流畅和响应性。此外,PocketBase的数据库支持事务,ACID兼容性,以及丰富的SQL查询功能,为数据的完整性和安全性提供了保障。

  • 文件和用户管理

PocketBase的文件管理功能提供了一个完整的解决方案,用于处理应用程序中的文件上传、存储和检索。它支持多种文件类型,并能够根据需要配置存储位置和访问权限。用户管理系统则包括了用户注册、登录、密码加密存储、角色和权限分配等基本功能,为开发者提供了一套完整的用户认证和授权机制,可以轻松集成到任何需要用户账户的应用程序中。


  • 管理仪表板UI

PocketBase的管理仪表板是一个为管理员设计的图形界面,它允许管理员通过一个简洁直观的界面来管理数据库记录、用户账户和文件。仪表板提供了数据可视化工具,如表格和图表,帮助管理员快速理解数据结构和内容。同时,它还支持自定义视图和报告,使得管理员可以根据需要调整和管理后端数据。

REST-ish API

PocketBase的API设计遵循REST原则,提供了一组简单直观的HTTP端点,用于实现数据的增删改查操作。这些API端点支持JSON格式的数据交换,使得前端开发者可以轻松地通过HTTP请求与后端进行通信。API的设计考虑了现代Web开发的需求,提供了路由、中间件支持和数据验证等功能,以确保API的灵活性和安全性。

软件地址:github.com/pocketbase/pocketbase

PocketBase作为一个活跃的开源项目,虽然提供了许多创新的功能,但在使用过程中也可能遇到一些挑战。例如,由于项目仍在开发中,向后兼容性可能不是完全保证的,这意味着在新版本发布时,现有代码可能需要进行调整以适应新的API或数据库结构。此外,随着用户量的增加,性能优化也可能成为一个需要关注的问题,尤其是在处理大量数据和高并发请求时。
面对这些潜在问题,开发者可以采取一些措施来缓解风险。首先,定期关注PocketBase的更新日志和文档,了解即将到来的变更,这样可以提前准备代码的更新。其次,对于性能问题,可以通过优化数据库查询、使用缓存策略或增加服务器资源来提高应用程序的响应速度和处理能力。此外,开发者还可以利用PocketBase提供的自定义功能,根据具体需求调整后端逻辑,以实现更高效的数据处理。
PocketBase的设计哲学鼓励开发者利用其灵活性来构建定制化的解决方案。这意味着,尽管可能会遇到一些技术挑战,但通过适当的技术策略和创新思维,开发者可以克服这些问题,并利用PocketBase构建出既高效又可靠的应用程序。这种适应性和可定制性是PocketBase吸引开发者的重要因素之一,也是其持续发展和完善的关键动力。
--------------------------------

低代码开发平台:仅仅1 个文件中开发您的SaaS实时后端.
 

PocketBase - 1 个文件中的开源后端

建造 最新版本 Go 包文档

PocketBase是一个开源 Go 后端,包括:

  • 具有实时订阅功能的嵌入式数据库(SQLite
  • 内置文件和用户管理
  • 方便的管理仪表板 UI
  • 和简单的REST-ish API

有关文档和示例,请访问https://pocketbase.io/docs

警告

请记住,PocketBase 仍在积极开发中,因此在达到 v1.0.0 之前不能保证完全向后兼容性。

API SDK客户端

与 API 交互的最简单方法是使用官方 SDK 客户端之一:

概述

用作独立应用程序

您可以从发布页面下载适合您的平台的预构建可执行文件。下载后,解压存档并./pocketbase serve在解压的目录中运行。

预构建的可执行文件基于该examples/base/main.go文件,并默认启用 JS VM 插件,允许使用 JavaScript 扩展 PocketBase(更多详细信息,请参阅使用 JavaScript 扩展)。

用作 Go 框架/工具包

PocketBase 作为常规 Go 库包进行分发,它允许您构建自己的自定义应用程序特定的业务逻辑,并且最终仍然有一个可移植的可执行文件。

这是一个最小的例子:

  1. 安装 Go 1.21+如果尚未安装

  2. main.go创建一个新的项目目录,其中包含以下文件:

    要初始化依赖项,请运行go mod init myapp && go mod tidy.

  3. 要启动应用程序,请运行go run main.go serve.

  4. 要构建静态链接的可执行文件,您可以运行CGO_ENABLED=0 go build然后使用 启动创建的可执行文件./myapp serve

笔记

PocketBase 嵌入了 SQLite,但不需要 CGO。

如果启用了 CGO(又名。CGO_ENABLED=1),它将使用mattn/go-sqlite3驱动程序,否则 - Modernc.org/sqlite。仅当您确实需要以交叉编译复杂化为代价压缩读/写查询性能时才启用 CGO。

有关更多详细信息,请参阅使用 Go 扩展

构建并运行 repo main.go 示例

要构建最小的独立可执行文件(例如发布页面中的预构建可执行文件),您只需go buildexamples/base目录中运行即可:

  1. 安装 Go 1.21+如果尚未安装
  2. 克隆/下载存储库
  3. 导航examples/base
  4. 运行GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go buildhttps://go.dev/doc/install/source#environment
  5. 通过运行启动创建的可执行文件./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 中存在安全漏洞,请发送电子邮件至pocketbase.io 寻求支持

所有报告都将得到及时处理,并且您将获得相应的奖励。

from https://gitlab.com/yuanzhongqiao/pocketbase

 

 

 

No comments:

Post a Comment