什么是 Headless CMS?
Headless CMS 是一种内容管理系统(CMS)的架构,它只关注内容管理的后端,也就是数据的存储和管理,而不涉及前端的显示表现。和传统的 CMS 不同,Headless CMS 抛弃了模板引擎及渲染的功能,强制要求开发者使用 API 请求获取数据,然后用自己的方式展示或渲染你的内容。Headless CMS 常被用于单页应用程序(SPA)和客户端应用程序,对于那些不需要渲染页面的后端内容管理来说,Headless CMS 是非常友好和高效的选择。
Headless CMS 的优势
1. 灵活性
Headless CMS 可以更加灵活地与各种前端框架(如 React, Vue, Angular)及技术(如 GraphQL, RESTful)交互,而传统的 CMS 则只能使用它们自带的模板引擎及样式,这限制了前端开发者的自由度。
2. 可复用性
Headless CMS 架构下的内容数据可以在多个客户端和应用程序中被重复使用,这是传统 CMS 所不具备的。
3. 更高的性能
由于 Headless CMS 只负责后端数据存储和管理,没有渲染等耗费性能的操作,在处理高流量用户访问时,更能保持应用程序的高效性。
4. 更好的安全性
传统的 CMS 通常将后端和前端紧密耦合,这使得它们容易受到各种安全漏洞的攻击,而 Headless CMS 通过使用纯后端 API,将前后端分离,有利于减少安全风险。
如何使用 Headless CMS?
步骤一:引入 Headless CMS
首先,我们需要引入 Headless CMS,以此声明一个实例,并且连接到服务提供商(如:strapi,prismic 等)的 API,示例代码如下:
------ ------ ---- ------------------------ ----- ------ - --- --------------------------------
步骤二:创建数据
一旦你有了一个 Headless CMS 实例,我们就可以开始创建数据,大多数 Headless CMS 在用户界面都会提供一个可视化的管理页面来简化这个过程。
首先,让我们创建一个简单的 Post 模型,包括 title, content 和 date 三个属性:
-------------------------- - ------ --- ---- ------- -------- --- ---- --------- ----- --- -------------------- ---
这里,我们使用 createEntry
方法来在实例中创建一个新的 Post,第一个参数指定了模型名称,第二个参数则是数据的内容。
步骤三:查询数据
一旦成功存储了数据,我们需要从 Headless CMS 实例中获取数据,以便在我们的应用程序中使用。
----- ----- - ----- --------------------------
我们使用 getEntries
方法来加载 Post 数据,然后将其分配给一个变量。这里的 await
是因为 getEntries
方法返回了一个 Promise。
步骤四:使用数据
一旦我们拥有了我们想要的数据,就可以将其传递给我们的应用程序的逻辑代码,以将其用于前端表现。
----- ----- - ----- -------------------------- -- ---- ---- -- -------------------- -- - ----------------------- ---
这里,我们显示了所有存储在 Headless CMS 实例中的 Post 数据的标题。
步骤五:发布
在最后一步中,我们需要将数据发布到我们的服务器上,以便所有用户都可以访问。
这个过程会因 Headless CMS 和主机管理工具(如 Heroku, AWS, DigitalOcean 等)而不同,一般需要按照你服务提供商的文档和指南进行。
结论
Headless CMS 提供了处理和管理数据的好方法,而这种方法鼓励前端开发者发挥创造力,避免了一些传统 CMS 与前端耦合的问题。随着越来越多的企业将其数据从传统的 CMS 接口中分离出来,以便更好地应对现代的客户端应用程序和网站的需求,Headless CMS 势必成为一个非常重要的工具。
参考链接
- Headless CMS, APIs and GraphQL
- Contentful's Introduction to Headless CMS
- Why Use a Headless CMS?
- 2019 State of the Headless CMS
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66f7c466c5c563ced5a9d1d7