Sanity CMS:开发者钟爱的内容编辑器

Sanity 评测 — 支持实时协作、GROQ 查询和可定制管理后台的无头 CMS。适合重视开发者体验和内容控制的团队。

Sanity 是挪威的无头 CMS,成立于 2015 年。与竞品的主要区别:内容是结构化数据,而非 HTML 块。开发者在代码中描述模式,编辑者在实时协作管理后台中填充内容,内容查询使用 GROQ — Sanity 自有的查询语言。

官网:sanity.io

架构

Sanity 在根本层面上分离了内容和展示。内容存在于 Sanity Content Lake — 通过 API 访问的云端存储。管理后台(Sanity Studio)是一个 React 应用,可以随意定制并托管在任何地方。

内容模式在 JavaScript/TypeScript 文件中描述。你定义字段、类型、验证、关联 — Studio 自动识别模式。模式的更改与 Studio 代码一起部署 — 基于 Git 的工作流,无需 GUI 配置器。

GROQ — 查询语言

GROQ(Graph-Relational Object Queries)类似 GraphQL,但针对文档操作进行了优化。它可以在一个查询中查询嵌套结构、过滤、聚合和转换数据。示例:

*[_type == "post" && publishedAt < now()] | order(publishedAt desc) {
  title,
  "slug": slug.current,
  "author": author->name,
  "related": *[_type == "post" && references(^._id)]{title}
}[0...10]

功能强大,但需要时间适应。熟悉 GraphQL 的开发者一两天内即可掌握。

实时协作

多个编辑者可以同时处理同一个文档。更改即时显示 — 就像 Google Docs 一样。冲突在字段级别解决。对于 2–3 人共同编辑一篇文章的编辑部和内容团队来说,这是杀手级功能。

价格方案

  • Free:无限内容,2 个用户,100 GB 素材
  • Growth:$15/月/用户 — 自定义角色,定时发布
  • Enterprise:定制 — SSO,审计日志,专属支持

免费套餐非常慷慨。5 人团队 — $75/月。与 Contentful 相比(5 个用户 $489/月)— 差距是一个数量级。

优点

开发者体验是主要亮点。代码中的模式,通过 Git 部署,React 定制管理后台。直接在编辑面板中嵌入自定义组件:预览、自定义小部件、集成。可以为客户品牌定制 Sanity Studio 的样式。

GROQ — 掌握后赋予你超能力。按关联文档过滤、条件字段、聚合 — 全在一个查询中,没有 N+1 问题。

内容可通过 GraphQL 和 GROQ 同时访问。API 快速,CDN 缓存,用于重新构建的 webhook。

顾虑

学习曲线比 Strapi 或 Storyblok 更陡峭。GROQ 需要学习,Studio 需要构建 — 这不是即插即用。对于结构典型的简单博客来说,开销过大。

供应商锁定:Content Lake 中的内容不仅仅是 JSON。可以导出为 Markdown,但 Sanity 的结构(引用、块、可移植文本)会丢失。逆向迁移将会很痛苦。

按用户定价($15/月)对于大团队来说会快速累积。20 个编辑者 — $300/月。

总结

Sanity 是面向开发者参与内容设计的团队的 CMS。如果你的数据结构复杂,需要实时协作,并希望为客户定制管理后台 — Sanity 是市场上最佳选择。对于简单的博客和落地页 — 选择 Strapi,它更简单。