当前位置: 首页 > news >正文

PocketBase: Small but mighty backend in a single file

我需要一个存储一些配置的服务,这些配置会动态的被修改。可以使用本地文件来存储这些配置,但并发写会有问题,可以用建议性文件锁解决并发写的问题,但感觉操作有点麻烦。于是尝试用mysql,由于机器无法联网,安装过程颇为麻烦。于是考虑有没有更简单的替代方案,就找到了 PocketBase。
PocketBase封装了SQLite,增加了一些权限管理等功能,并对外提供web服务。因为其由Go实现,所以很容易就实现了“in 1 file”,只需要一个可执行程序即可使用,且不依赖其他动态库,非常方便。
下载下来pocketbase后,./pocketbase serve --dev即可在当前目录启动服务,“–dev”选项用于输出更多日志和sql语句,初次启动时需要点击控制台输出的链接来设置超级用户。
控制台的输出中会展示Dashboard和API的url:
Server started at http://127.0.0.1:8090
├─ REST API: http://127.0.0.1:8090/api/
└─ Dashboard: http://127.0.0.1:8090/_/

接下来我会创建一个表(collection)来存储配置,并用脚本查询配置。
登陆Dashboard,点击“+ New collection”,在弹出的界面中配置表的信息,“API Rules”中点击小锁可以设置访问规则,rule留空开启匿名访问。这里假设创建了名为test的表,有一个类型为字符串名为value的字段。
表的主键名字固定为id,如果要查询id为zxq8i98d55e07xt的记录,只要 curl http://127.0.0.1:8090/api/collections/test/records/zxq8i98d55e07xt,结果可能类似:
{“collectionId”:“pbc_4285667772”,“collectionName”:“test”,“created”:“2025-03-19 03:32:33.533Z”,“id”:“zxq8i98d55e07xt”,“updated”:“2025-03-20 08:23:31.815Z”,“value”:“aaa”}

jq 是一个用于解析json的命令,于是可以创建一个脚本来方便的获取test表的指定记录了:

#!/bin/bash
if [ $# -ne 2 ];then echo "usage: $0 name field"exit 1
fi
res=`curl -s http://127.0.0.1:8090/api/collections/test/records/$1 | jq ".$2"`
if [ "$res" = 'null' ];then echoexit 1
fi
echo ${res:1:-2} #去除首尾字符

用php实现相同功能:

<?php
function query_filed($name, $field) {$url = 'http://127.0.0.1:8090/api/collections/test/records/' . $name;$res = file_get_contents($url);if($res === false) return '';$data = json_decode($res, true);if($data === null) return '';return $data[$field];
}
?>

PocketBase不能直接执行sql语句,可以通过其他工具,比如 sqlite-web 直接读取SQLite的数据库文件。
PocketBase创建的SQLite数据库文件为 pb_data/data.db,通过 pip install sqlite-web 安装sqlite-web后,执行 sqlite_web /path/to/database.db 即可。


http://www.mrgr.cn/news/95324.html

相关文章:

  • 【AI】AI编程助手:Cursor、Codeium、GitHub Copilot、Roo Cline、Tabnine
  • 论文阅读:2024-NAACL Semstamp、2024-ACL (Findings) k-SemStamp
  • #pandas #python#数据标注 pd.crosstab()
  • 算法刷题记录——LeetCode篇(1) [第1~100题](持续更新)
  • 版本控制器Git ,Gitee如何连接Linux Gitee和Github区别
  • 力扣热题100(方便自己复习,自用)
  • 计算机二级MS之Excel
  • RAG优化:利用python实现上下文感知(扩展)增强检索效果
  • S32K144外设实验(三):ADC单通道连续采样(中断)
  • Yolo系列之Yolo的基本理解
  • Android Compose 图标按钮深度剖析:从源码到实践(五)
  • 【初探数据结构】树与二叉树
  • Powershell WSL导出导入ubuntu22.04.5子系统
  • 【PCB工艺】基础:电子元器件
  • 【leetcode hot 100 208】实现Trie(前缀树)
  • 从零实现本地文生图部署(Stable Diffusion)
  • fontTools工具的使用介绍
  • 算法刷题记录——LeetCode篇(6) [第501~600题](持续更新)
  • Powershell WSL部署ubuntu22.04.5子系统
  • The Illustrated Stable Diffusion