Files
raisfast/docs/strapi-gap-analysis.md
T

11 KiB
Raw Blame History

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 APIqueries、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 层面 的 i18nrust_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%)

现状:无任何导入导出功能。

StrapiWordPress 导入器、CSV/JSON 导入、全库导出/导入、实例间迁移。


14. 内容审核 — 部分 (~60%)

现状

  • 评论审核队列 UI(状态过滤、审批/拒绝/删除、批量操作)
  • 评论创建默认 pending,仅 approved 公开显示
  • 插件 hook on_comment_creating
  • 嵌套评论深度验证(最多 3 层)

Strapi 额外能力:垃圾评论检测/过滤、自动审批规则、AI 内容审核。


15. 定时发布 — 部分 (~40%)

现状

  • ScheduledPublishHandler 完整实现并通过测试
  • 已注册到 handler registry
  • 但没有任何代码触发它JobEnqueuer 不处理 ScheduledPublishDTO 无 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 APIasync-graphql + 自动 schema 生成) 5天
3.2 内容 i18nlocale 列 + translation_of FK + Admin 切换) 3天
3.3 导入导出(JSON/CSV + WordPress 导入器) 3天
3.4 实时 APISSE → 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 CLIrblog 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 + PostgreSQL200MB+
插件安全 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,开发者可按需选择性能/生态平衡点