mirror of
https://github.com/RaisFast/raisfast.git
synced 2026-09-24 08:02:36 +00:00
320 lines
11 KiB
Markdown
320 lines
11 KiB
Markdown
# Strapi 替代方案 — 差距分析与路线图
|
||
|
||
> 目标:高性能、高安全性、高扩展性的 Strapi 替代品
|
||
|
||
## 当前完成度:约 55%
|
||
|
||
| 类别 | 完成度 | 说明 |
|
||
|------|--------|------|
|
||
| **核心架构** | 95% | Handler→Service→Model、插件系统、CMS 引擎 |
|
||
| **认证/权限** | 80% | JWT + RBAC,缺密码重置 |
|
||
| **Content Type** | 90% | Builder UI + 动态 CRUD,缺组件/动态区块 |
|
||
| **Admin UI** | 70% | 20 个模块,缺 Relation Picker、批量编辑 |
|
||
| **媒体** | 50% | 上传/缩略图,缺裁剪/焦点/多格式 |
|
||
| **基础设施** | 75% | Worker/Cron/Webhook/搜索,缺 SMTP/重试日志 |
|
||
| **Strapi 标配功能** | 20% | 缺 GraphQL/内容 i18n/导入导出/主题 |
|
||
|
||
---
|
||
|
||
## 逐项差距分析
|
||
|
||
### 1. GraphQL API — 缺失 (0%)
|
||
|
||
**现状**:项目仅支持 REST API,所有路由注册在 `/api/v1/`。Cargo.toml 中无任何 GraphQL crate。
|
||
|
||
**Strapi**:提供完全自动生成的 GraphQL API(queries、mutations、subscriptions),支持过滤、分页、排序、关联自动解析。
|
||
|
||
**差距**:
|
||
- 无 GraphQL schema 生成
|
||
- 无 GraphQL 查询引擎
|
||
- 无 subscription(实时数据推送)
|
||
- 无 GraphQL playground
|
||
|
||
---
|
||
|
||
### 2. Content-Type Builder UI — 完成 (~90%)
|
||
|
||
**现状**:
|
||
- 完整的 Content-Type Builder 页面(1013 行),支持创建/编辑 content type
|
||
- 字段类型:text, richtext, email, password, uid, integer, bigint, decimal, float, date, datetime, time, boolean, enum, json, media, relation
|
||
- 字段配置:required, unique, private, immutable, label, description, default, max_length, min/max, enum_values, relation config, media config
|
||
- 字段上下移动排序、删除字段
|
||
- draft/publish, timestamps, soft_delete, slug_field 开关
|
||
|
||
**Strapi 额外能力**:
|
||
- 拖拽排序(本项目用上下箭头)
|
||
- 组件/可组合类型(Component,可复用字段组)
|
||
- 动态区块(Dynamic Zone,运行时选择组件类型)
|
||
- Schema 实时预览
|
||
|
||
---
|
||
|
||
### 3. 媒体库 — 部分 (~50%)
|
||
|
||
**现状**:
|
||
- 上传/下载/删除,MIME 校验 + magic-byte 验证
|
||
- 网格/列表视图、搜索、按类型过滤、排序
|
||
- 详情面板(类型、大小、尺寸、URL、日期)
|
||
- 自动缩略图生成(WebP,后台 Worker)
|
||
- 存储抽象(Local + S3)
|
||
- 统计端点
|
||
|
||
**Strapi 额外能力**:
|
||
- 裁剪/焦点编辑 UI
|
||
- 多格式/响应式图片变体(srcset)
|
||
- 焦点选择(smart cropping)
|
||
- 文件夹/相册组织
|
||
- 多文件上传进度条
|
||
|
||
---
|
||
|
||
### 4. 内容 i18n(每条记录多语言)— 缺失 (0%)
|
||
|
||
**现状**:仅有 **UI 层面** 的 i18n(rust_i18n + next-intl,支持 en/zh-CN)。posts 表无 locale 列,无 translation_of 外键,无记录级翻译管理。
|
||
|
||
**Strapi**:每条内容可有 en/zh/fr 等多语言版本,管理员在编辑界面切换语言,支持回退 locale。
|
||
|
||
**差距**:
|
||
- 无 per-record 多语言模型
|
||
- 无语言切换 UI
|
||
- 无 fallback locale 逻辑
|
||
- 无翻译同步机制
|
||
|
||
---
|
||
|
||
### 5. Admin 关联管理 — 部分 (~30%)
|
||
|
||
**现状**:Content-Type Builder 支持定义 relation 字段,后端有完整的 relation 解析(批量 ManyToOne/OneToOne/OneToMany/ManyToMany)。但 **前端 relation 字段渲染为普通文本 Input**,用户必须手动输入关联记录 ID。
|
||
|
||
**Strapi**:完整的 Relation Picker,支持搜索、分页、多选(ManyToMany)、从 Picker 内直接创建关联记录。
|
||
|
||
**差距**:
|
||
- 无下拉/combobox 浏览选择关联记录
|
||
- 无搜索联想
|
||
- 无分页浏览
|
||
- 无内联创建关联记录
|
||
- 不显示关联记录的 title/name(仅显示原始 ID)
|
||
|
||
---
|
||
|
||
### 6. 用户/角色管理 UI — 完成 (~80%)
|
||
|
||
**现状**:
|
||
- 用户管理页(列表、创建、改角色、分页)
|
||
- RBAC 页(角色 CRUD、权限管理、系统角色保护)
|
||
- 后端完整的 role/permission 数据库操作
|
||
|
||
**Strapi 额外能力**:
|
||
- 管理员编辑其他用户的资料(email/username/bio)
|
||
- 用户封禁/停用/暂停
|
||
- 用户头像管理
|
||
- 更细粒度的字段级权限控制
|
||
- 可视化权限矩阵编辑器
|
||
|
||
---
|
||
|
||
### 7. Webhook 投递重试 — 部分 (~60%)
|
||
|
||
**现状**:
|
||
- Worker 框架级指数退避重试(base × 2^attempt + jitter)
|
||
- 最大重试次数(默认 3),死信队列
|
||
- 死信任务可手动重试
|
||
- HMAC-SHA256 签名
|
||
- Webhook handler 非 2xx 返回 error 触发重试
|
||
|
||
**Strapi 额外能力**:
|
||
- 每个订阅独立配置重试策略
|
||
- 投递日志/历史(每次尝试的响应码、响应体)
|
||
- Webhook 调试 UI
|
||
- 自动熔断/禁用失败 webhook
|
||
|
||
---
|
||
|
||
### 8. 邮件发送 (SMTP) — 缺失 (0%,仅有 stub)
|
||
|
||
**现状**:`SendWelcomeEmailHandler` 仅 log 到控制台,有注释掉的 SMTP 代码。AppConfig 无 SMTP 字段,Cargo.toml 无 lettre 依赖。
|
||
|
||
**Strapi**:完整的邮件 Provider 系统,支持 SendGrid、Mailgun、Amazon SES、自定义 SMTP。
|
||
|
||
---
|
||
|
||
### 9. 密码重置流程 — 缺失 (0%)
|
||
|
||
**现状**:Auth handler 支持 register/login/refresh/logout/change_password。无 forgot-password/reset-password endpoint,无 reset token,无相关 UI。
|
||
|
||
**Strapi**:完整的 forgot-password → 邮件 token → reset-password 流程。
|
||
|
||
---
|
||
|
||
### 10. API 版本管理 — 部分 (~20%)
|
||
|
||
**现状**:所有 API 路由挂在 `/api/v1/`,仅为 URL 前缀。
|
||
|
||
**Strapi**:支持多版本并行、版本协商、废弃通知。
|
||
|
||
---
|
||
|
||
### 11. 插件市场 — 部分 (~50%)
|
||
|
||
**现状**:
|
||
- 插件管理 UI(列表、启用/禁用/重载/删除)
|
||
- 完整插件系统(WASM/JS/Lua 三引擎)
|
||
- 插件热重载、健康监控、VFS、权限、存储
|
||
- 扩展安装/启用/禁用/卸载
|
||
|
||
**Strapi 额外能力**:在线 Marketplace,浏览/搜索/一键安装社区插件。
|
||
|
||
---
|
||
|
||
### 12. 主题系统 — 极少 (~10%)
|
||
|
||
**现状**:仅有 dark/light CSS 切换(next-themes + Tailwind dark mode)。
|
||
|
||
**Strapi**:管理面板主题引擎(自定义颜色/logo/字体)+ 公开主题市场 + 模板引擎。
|
||
|
||
---
|
||
|
||
### 13. 导入/导出 — 缺失 (0%)
|
||
|
||
**现状**:无任何导入导出功能。
|
||
|
||
**Strapi**:WordPress 导入器、CSV/JSON 导入、全库导出/导入、实例间迁移。
|
||
|
||
---
|
||
|
||
### 14. 内容审核 — 部分 (~60%)
|
||
|
||
**现状**:
|
||
- 评论审核队列 UI(状态过滤、审批/拒绝/删除、批量操作)
|
||
- 评论创建默认 pending,仅 approved 公开显示
|
||
- 插件 hook `on_comment_creating`
|
||
- 嵌套评论深度验证(最多 3 层)
|
||
|
||
**Strapi 额外能力**:垃圾评论检测/过滤、自动审批规则、AI 内容审核。
|
||
|
||
---
|
||
|
||
### 15. 定时发布 — 部分 (~40%)
|
||
|
||
**现状**:
|
||
- `ScheduledPublishHandler` 完整实现并通过测试
|
||
- 已注册到 handler registry
|
||
- **但没有任何代码触发它**:`JobEnqueuer` 不处理 `ScheduledPublish`,DTO 无 `publish_at` 字段,无 UI 设置发布时间
|
||
|
||
**Strapi**:编辑器设置发布日期,系统自动在指定时间发布。
|
||
|
||
---
|
||
|
||
## 路线图
|
||
|
||
### Phase 1 — 补齐基础体验(2-3 周)
|
||
|
||
目标:**用户能完整使用,不卡在基本流程上**
|
||
|
||
| # | 任务 | 优先级 | 工作量 |
|
||
|---|------|--------|--------|
|
||
| 1.1 | SMTP 邮件发送(lettre + 配置) | P0 | 2天 |
|
||
| 1.2 | 密码重置流程(forgot/reset endpoint + 邮件) | P0 | 1天 |
|
||
| 1.3 | 定时发布对接(handler 已有,加 glue code) | P0 | 0.5天 |
|
||
| 1.4 | Relation Picker UI(下拉搜索选择关联记录) | P0 | 2天 |
|
||
| 1.5 | Webhook 投递日志(delivery history + 重试 UI) | P1 | 1天 |
|
||
|
||
### Phase 2 — Admin UI 打磨(2-3 周)
|
||
|
||
目标:**Admin 体验不输 Strapi**
|
||
|
||
| # | 任务 | 工作量 |
|
||
|---|------|--------|
|
||
| 2.1 | Content-Type Builder 拖拽排序(dnd-kit 替代箭头) | 1天 |
|
||
| 2.2 | 批量操作(列表页多选 + 批量删除/发布/移动) | 2天 |
|
||
| 2.3 | 媒体库增强(文件夹组织 + 多文件上传进度条) | 2天 |
|
||
| 2.4 | 内联编辑器(列表页直接编辑字段,不用进详情) | 2天 |
|
||
| 2.5 | Admin 全局搜索(Cmd+K 弹窗,搜索所有资源) | 1天 |
|
||
|
||
### Phase 3 — 核心差异化功能(3-4 周)
|
||
|
||
目标:**补齐 Strapi 标配 + 发挥 Rust 优势**
|
||
|
||
| # | 任务 | 工作量 |
|
||
|---|------|--------|
|
||
| 3.1 | GraphQL API(async-graphql + 自动 schema 生成) | 5天 |
|
||
| 3.2 | 内容 i18n(locale 列 + translation_of FK + Admin 切换) | 3天 |
|
||
| 3.3 | 导入导出(JSON/CSV + WordPress 导入器) | 3天 |
|
||
| 3.4 | 实时 API(SSE → WebSocket 升级 + 订阅过滤) | 2天 |
|
||
| 3.5 | Dashboard 仪表盘(统计图表 + 最近活动 + 快捷操作) | 2天 |
|
||
|
||
### Phase 4 — 开发者体验(2-3 周)
|
||
|
||
目标:**让其他开发者愿意用**
|
||
|
||
| # | 任务 | 工作量 |
|
||
|---|------|--------|
|
||
| 4.1 | 文档站(Getting Started + API Reference + Plugin 开发指南) | 5天 |
|
||
| 4.2 | Demo 站点(在线体验,预装示例数据) | 2天 |
|
||
| 4.3 | 一键部署(`docker compose up` 3 分钟跑起来) | 2天 |
|
||
| 4.4 | Plugin CLI(`rblog plugin new/create/publish`) | 3天 |
|
||
| 4.5 | TypeScript SDK 生成(从 OpenAPI spec 自动生成) | 2天 |
|
||
|
||
### Phase 5 — 插件生态(3-4 周)
|
||
|
||
目标:**有可用的官方插件**
|
||
|
||
| # | 任务 | 工作量 |
|
||
|---|------|--------|
|
||
| 5.1 | 插件市场 UI(浏览/搜索/一键安装) | 3天 |
|
||
| 5.2 | 插件注册中心(简单的 registry API + 存储) | 3天 |
|
||
| 5.3 | 官方插件:Stripe 支付 | 3天 |
|
||
| 5.4 | 官方插件:Algolia/Meilisearch 搜索 | 2天 |
|
||
| 5.5 | 官方插件:邮件营销 | 3天 |
|
||
| 5.6 | 官方插件:AI 内容生成 | 3天 |
|
||
|
||
### Phase 6 — 企业级功能(4-6 周)
|
||
|
||
目标:**能卖给企业**
|
||
|
||
| # | 任务 | 工作量 |
|
||
|---|------|--------|
|
||
| 6.1 | SSO/SAML | 5天 |
|
||
| 6.2 | 审计日志增强(导出 CSV、合规报告) | 2天 |
|
||
| 6.3 | 内容审批工作流(多级审批、评论批注) | 5天 |
|
||
| 6.4 | 主题引擎(模板系统 + 主题市场) | 5天 |
|
||
| 6.5 | PostgreSQL 生产支持 | 5天 |
|
||
| 6.6 | 多数据库连接(读写分离) | 3天 |
|
||
|
||
---
|
||
|
||
## 总时间估算
|
||
|
||
| 阶段 | 时间 | 里程碑 |
|
||
|------|------|--------|
|
||
| Phase 1 | 2-3 周 | 可自用的完整 CMS |
|
||
| Phase 2 | 2-3 周 | Admin 体验达标 |
|
||
| Phase 3 | 3-4 周 | 功能对齐 Strapi |
|
||
| Phase 4 | 2-3 周 | 开源发布就绪 |
|
||
| Phase 5 | 3-4 周 | 有插件生态 |
|
||
| Phase 6 | 4-6 周 | 企业可用 |
|
||
| **总计** | **16-23 周** | Strapi 替代 |
|
||
|
||
---
|
||
|
||
## 核心竞争优势
|
||
|
||
### vs Strapi
|
||
|
||
| 维度 | raisfast | Strapi |
|
||
|------|-----------|--------|
|
||
| **性能** | 单实例 10x QPS,内存 1/10 | Node.js 需要集群才能到千级 QPS |
|
||
| **部署** | 单二进制 30MB,零依赖 | Node.js 18+ + npm + PostgreSQL,200MB+ |
|
||
| **插件安全** | WASM 沙箱隔离,插件崩溃不影响主进程 | JS 插件直接 require(),一个 crash 全挂 |
|
||
| **冷启动** | <100ms | 3-5 秒 |
|
||
| **二进制安全** | 编译型,源码不可逆 | JavaScript 源码可直接阅读 |
|
||
| **GC** | 无 GC 暂停 | V8 GC 导致 P99 延迟毛刺 |
|
||
| **单机密度** | 一台 1C1G VPS 跑几十个站点(SQLite) | 每个站点需要独立进程 + 数据库连接 |
|
||
|
||
### 独特卖点
|
||
|
||
1. **WASM 插件沙箱** — Strapi 完全没有的安全隔离机制,是构建可信插件市场的前提
|
||
2. **极致轻量部署** — 30MB 单文件替代 Node.js 全家桶,适合嵌入式、边缘、IoT 场景
|
||
3. **SQLite 原生架构** — 多租户托管成本极低(每站点一个 .db 文件),不依赖外部数据库
|
||
4. **三引擎插件** — WASM + JS + Lua,开发者可按需选择性能/生态平衡点
|