什么是无头 CMS?

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 $200 免费赠送额度!

您是否听说过这个术语?它很流行。它与过去几年网络上的“大讨论™”密切相关。我们如何处理将“我们的东西™”带到所有这些不同的设备/屏幕/输入上。

响应式设计说“让我们让我们的设计和媒体适应尽可能多的屏幕变化”。

渐进增强说“让我们让这个网站的功能无论如何都能正常工作”。

为可访问性设计说“让我们确保每个人都能使用它,无论他们作为个人的能力如何”。

无头 CMS 说“让我们不要将我们的数据绑定到任何一种做事方式”。

“常规”CMS 为我们提供了三样东西

  1. 一种存储数据的方式
  2. 一个 CRUD UI
  3. 显示数据的方式

“无头”CMS 仅共享前两者

  1. 一种存储数据的方式
  2. 一个 CRUD UI
  3. 一个 API 用于访问数据

“头部”(我们正在砍掉!eww!)是 CMS 的显示或“视图”部分。

TL;DR 图表

技术比较

也许在常规 CMS 中,获取存储数据的唯一方式是它提供的函数。比如

<?php MyCoolCMS->get_post_data(12); ?>

<h1>
  <?php echo post_title(); ?>
</h1>

<?php echo post_contents(); ?>

如果您想要访问该数据,唯一的入口是使用它提供的函数。您可能会编写一个类似 API 输出的视图。或者,您可以编写查询到数据存储中以获取所需内容。但这些东西不是 CMS 的“一等公民”。

在无头 CMS 中,访问该数据将是一个类似 URL 的端点,比如

https://api.our-stuff.com/posts?id=12

它将吐出

[
  {
    id: 12,
    title: "Post Title",
    authorName: "Chris Coyier",
    dateCreated: "2007-07-03 10:42:02",
    postContent: "<p>A long time ago...</p>"
  }
]

类似的东西

URL 结构、查询参数等等都取决于 CMS,并且很可能是“RESTful”的。我没有资格提供这方面的建议,但它很容易在网络上搜索和阅读,以及查看参考实现。

你甚至不知道下一个“东西”是什么。

也许它是一个植入你手腕的小装置,可以在你的前臂上投射一个屏幕。它非常受欢迎。每个人都在买。制造它的公司允许人们为它编写应用程序,但它没有网络浏览器。不过它有网络访问权限。

因此,现在,如果您想使用他们设置的任何系统来编写应用程序,使用网络访问权限,并将您的数据传输到它以供使用。

您不必知道这个新事物即将出现,您的数据已经准备好传输。

仅仅因为它是 API,并不意味着使用它的视图是客户端的

哦,太好了,更多只用 JavaScript 才能运行的网站。

不。服务器端代码可以像客户端代码一样读取和消化来自 API 的数据。

您可以将“常规”CMS 用作“无头”CMS 吗?

当然。

我们有 一篇关于 WordPress REST API 的教程 可能会让您感兴趣。

WordPress 绝对是一个“常规”CMS,因为它绝对有视图的概念,但您并不需要使用这些视图。如果您想完全通过 API 消化 WordPress,那是可能的。

收听有关此主题的完整对话

Dave Rupert、Jeff Eaton、Matt Dennewitz 和我在 ShopTalk 上 详细讨论了这个问题

人们真的在做这个吗?

是的。我已经看到了一些实现,并听说在主要出版物中广泛使用。但我不能确定是否有资格或被授权解释它们。

你们中有人在做这个吗?