使用xxxbase应付CRUD后端任务

很多的后端CRUD开发任务都是毫无意义的, 如果使用firebase/supabase/pocketbase这些工具快速应付这些任务才是重要的.

如果是一位研究生, 在面对导师的垃圾横向的时候, 这种工具会起到很好的帮助.(我们的目的是让代码可以正常运行)

如果希望快速开发DEMO, 展示项目效果也可以使用.

面对全栈开发者, 我想学***xbase是很好的一个提升效率的过程.

supabase

由微软开源的firebase替代方案, 项目地址是 https://github.com/supabase/supabase/

采用typescript编写实现, 支持的SDK种类丰富, 稳定适合企业使用. 功能稳定, 文档丰富.

pocketbase

由非盈利开发, 使用GO编写的, 项目地址 https://github.com/pocketbase/pocketbase/ . 核心是单个文件实现需要的后端CRUD功能(也就是简单易用, 但是面对大项目可能存在问题)

这已经是一个拥有40+k stars的项目, 具有规模

数据集采用sqlite(并且没有计划适配别的数据库)

  • 目前支持的SDK较少, 只有JS和Dart的支持.
  • 模板版本还是0.xxx, 还没有到1.0正式版本, 也就是说, 功能不够稳定, 不适合企业使用.

使用pocketbase解决CRUD任务

pocketbase的核心是一个可执行文件使用全部功能, 小巧(但是目前还没有稳定版本, 所以谨慎使用, 目前不适合生产环境)

即使是docker image也只有50MB大小

构建镜像

使用docker build -t pocketbase .构建镜像

dockerfile 复制代码
FROM alpine:latest

ARG PB_VERSION=0.26.6

RUN apk add --no-cache \
    unzip \
    ca-certificates

# download and unzip PocketBase
ADD https://github.com/pocketbase/pocketbase/releases/download/v${PB_VERSION}/pocketbase_${PB_VERSION}_linux_amd64.zip /tmp/pb.zip
RUN unzip /tmp/pb.zip -d /pb/

# uncomment to copy the local pb_migrations dir into the image
# COPY ./pb_migrations /pb/pb_migrations

# uncomment to copy the local pb_hooks dir into the image
# COPY ./pb_hooks /pb/pb_hooks

EXPOSE 8080

# start PocketBase
CMD ["/pb/pocketbase", "serve", "--http=0.0.0.0:8080"]

这是官方提供的dockerfile, 可以去官方的文档里面查看

运行

使用docker run -it --rm -p 8080:8080 pocketbase:latest运行项目

注册管理员

点击日志中出现的网址, 注册对应的管理员账号

注册成功之后会自动跳转管理界面

目前在管理用户界面, 不存在用户

创建用户

在管理面板就可以创建用户.

使用SDK

注册用户

这里使用JS的SDK为例子进行演示.

javascript 复制代码
import PocketBase from 'pocketbase';

const pb = new PocketBase('http://0.0.0.0:8080');

// example create data
const data = {
    "password": "12345678",
    "passwordConfirm": "12345678",
    "email": "[email protected]",
    "name": "test"
};

const record = await pb.collection('users').create(data);

// (optional) send an email verification request
// await pb.collection('users').requestVerification('[email protected]');

注册用户的本质是增加一个新的记录

成功增加一个

登陆

为什么需要登陆? 因为有些操作需要在鉴权的基础上进行.(例如对于用户的查询操作)

js 复制代码
import PocketBase from 'pocketbase';

const pb = new PocketBase('http://0.0.0.0:8080');

...

const authData = await pb.collection('users').authWithPassword(
    'YOUR_EMAIL',
    'YOUR_PASSWORD',
);

// after the above you can also access the auth data from the authStore
console.log(pb.authStore.isValid);
console.log(pb.authStore.token);
console.log(pb.authStore.record.id);

// "logout"
pb.authStore.clear();

查询

以下是一个针对用户的查询操作

  • 注意这个操作需要先登陆用户.
javascript 复制代码
// fetch a paginated records list
const resultList = await pb.collection('users').getList(1, 30, {
    filter: 'name="test"',
});

console.log(resultList);

查询成功

这就是数据表的规则

可以设置仅超级用户可用

更新和删除

都需要使用record id进行操作.

使用supabase解决CRUD任务

这里使用supabase作为样例来解决增删查改的任务, 因为supabase生态完善, 功能稳定, 更加适合.

  • 开摆了, supabase是怎么做到光代码就有1G的, 我都不敢想下载了node_modules黑洞之后会变成什么样, 有那么一点点歧视TS后端了.

总结

针对简单的CRUD任务, 并且如果只需要能跑, 这是真的好用.

FQ&A

Q: 使用这些工具进行开发的时候, 开发的自由度是否存在问题?

A: 明显存在问题, 但是, 自由度换来了90%任务开发的便捷

Q: 是否存在性能问题? 例如supabse是使用TS编写的后端服务.

A: 首先, 一般项目不会面对高并发的场景, QPS撑死不超过10的情况下, 性能问题无关紧要, 开发便捷才重要, 先完成任务. 实际上也不存在性能问题, 这些工具由各位大佬实现, 面对绝大多数场景不存在性能问题.(性能问题不重要)

相关推荐
林木木木木木木木木木2 小时前
【随身WiFi】随身WiFi Debian系统优化教程
linux·运维·debian·随身wifi
杨浦老苏2 小时前
Docker应用端口查看器docker-port-viewer
运维·docker·群晖
临观_2 小时前
打靶日记 zico2: 1
linux·网络安全
痆古酊旳琲伤2 小时前
Linux驱动开发1 - Platform设备
linux·驱动开发
周Echo周2 小时前
16、堆基础知识点和priority_queue的模拟实现
java·linux·c语言·开发语言·c++·后端·算法
筑梦之路3 小时前
如何对docker镜像存在的gosu安全漏洞进行修复——筑梦之路
运维·docker·容器
零点零一3 小时前
在Ubuntu系统中安装和升级RabbitVCS
linux·运维·ubuntu
宇希啊3 小时前
C语言多进程素数计算
linux·c语言
逢生博客4 小时前
将 DeepSeek 集成到 Spring Boot 项目实现通过 AI 对话方式操作后台数据
人工智能·spring boot·docker·deepseek·cherry studio·mcp 服务端·mcp 客户端
绵绵细雨中的乡音4 小时前
Linux-进度条小程序
linux·运维·服务器