了解 Sanity.io 的 Headless CMS 新特性

什么是 Headless CMS?

Headless CMS(无头内容管理系统)是一种全新的内容管理系统,它通过提供 RESTful API 或 GraphQL 接口将内容从 CMS 内部分离。这种方法在前端开发中很常见,它使开发人员可以从头开始构建自定义的前端解决方案,并从中减轻了与 CMS 的前五个关注点:安全性、维护、备份、功能和性能。Headless CMS 允许客户制定规则,从而在没有头部的情况下声明其内容和数据结构。这使得 Headless CMS 的内容更具有可重用性、更富有表现力,并且可以在更新内容时更具灵活性。

Sanity.io 简介

Sanity.io 是一种面向现代应用程序的无头 CMS,它可以管理任何类型的内容,包括文本、视频、图像、音频、URL、地图等,而且允许客户创建其自定义数据结构。在集成了 Sanity.io 后,内容托管在全球 CDN 上并且与您的前端解决方案完全集成。它提供了许多新特性,支持用户管理、团队协作、自定义域名等等。

什么是 Sanity Studio?

Sanity 提供了一个名为 Sanity Studio 的带有现代 UI 的图形界面来帮助管理员管理内容。谷歌钥匙和 OAuth 等身份验证和权限机制使得创建凭证和规则管理变得更加容易,而自定义插件扩展了返回的数据,以增强管理员的工作效率,一定程度上简化了工作流程。其中,Sanity Studio 还提供了自定义 Schema 和可扩展的输入控件等额外的高级特性,以满足各种具体的应用场景。

Sanity.io 的 Headless CMS 新特性

Incremental publishing(增量发布)

你可能会有发布定期的博客文章或者较为稳定的页面的需求,但是如果系统中除了文章以外还有一些其他数据也需要同时推送,那么就可能会存在耗时较长、需要等待所有资源都被推送完才可以进行下一步操作等问题。Sanity.io 的 Incremental publishing 功能可以大大提高此类耗时长、依赖多种资源情况下的发布效率。具体地,Incremental publishing 的实现方式是根据时间线记录和跟踪已经发布的资源,而非每次发布都检查所有资源。这样一来,我们在每次主动发布内容时,程序可以快速判断出上一次发布后哪些资源被添加、更新或者删除了,并且只对这些有变化的资源进行处理,从而实现增量式的发布。

Sanity Webhooks

Webhooks 是一种广泛使用的技术,它使得在特定事件触发的时候发送 HTTP 请求成为了可能。在 Sanity Studio 中使用 Webhooks ,我们可以向远程应用程序发送 HTTP POST 请求,将 CMS 中的数据更新、新数据公开发布或删除时的通知推送到远端应用中(例如 React、Gatsby 等)。在实际开发中,我们常常需要在 Sanity.io 更新数据时,自动触发我们的远程程序更新数据或进行其他的业务逻辑。使用 Webhooks 可以方便地实现这一需求,以提高数据的时效性和单位时间处理能力的提升。

Portable Text

如果您正在寻找使用最新的技术来描述您的内容,那么 Portable Text 可能是您要找的。Portable Text 是一个描述内容的标记语言,可以适用于任何格式化文本内容的过程中。由于对与数据的结构相对比较抽象,因此它可以应用于任何类型的结构化文本。这使得您可以将数据导出作为可重用的数据结构,以便用于其他前端应用程序的渲染(例如 React 和 Vue),从而更容易保持一致的用户体验。

Sanity.io 中的 Image Asset 优化

在使用 Sanity.io 进行头像、照片、图标等图像存储时,需要循环加载和缓存图像的协议是一种新的协议,即 Sanity.io 提供的 Image Asset。它除了支持像基本图像大小和宽高比外的配置外,还加入了一些新技术,并内置了 CDN。一旦您将图像上传到 Sanity,它将生成一个<img> 标签(更多用于 srcset 等标签的配置)来访问它的 CDN。

如何使用 Sanity.io?

基本配置

1.首先您需要在 Sanity.io 上完成注册,并创建一个项目。

2.选择应用程序后,您需要创建一个 Schema ,其包括您的数据类型和其关系等元数据。

3.您可以使用 Sanity Studio 的 UI 来添加或修改内容。或者,您还可以使用 Sanity API 来进行 CRUD 操作。

示例代码

在这里,我们提供了一个用 Sanity.io 实施 Headless CMS 的实例代码。其中包括代码环境配置、数据结构定义和组件设计等方面。

环境配置

- -- ------ ---
--- ------- -- -----------

- -----
------ ----

- ---- ------ ------ --
------ -----

- -- ------ ------- ---
------ ------- ------

数据结构定义

-- ---------
------ ------- -
  ----- ----------
  ------ -----
  ----- -----------
  ------- -
    -
      ----- --------
      ------ -----
      ----- ---------
      ----------- ---- -- ----------------
    --
    -
      ----- --------------
      ------ -----
      ----- --------
      --- -- ----- ------- ---
    --
    -
      ----- --------
      ------ -----
      ----- ---------
      ----------- ---- -- ----------------
      --------------- ------
    --
    -
      ----- --------
      ------ -----
      ----- --------
      -------- -
        -------- -----
      --
      ----------- ---- -- ----------------
    --
  --
-

组件设计

-- --------
------ -------- ------------ -
  ----- -
    ----- - ------ ----------- --
    ------
    ---------
    ---------
  - - -----

  ------ -
    ---------- ------------- --------------------------
      -----
        ---- -------------------- - ----------
          ------
            -------------
            ------------------
            -------
            ------------ - ----
            --------------- -- -
              ----------------------
              --------------------------- - ----
            --
            -------------------
          --
        ------
        ---- -------------------- - --------------------
      ------
    ------------
  -
-

总结

在移动互联网的大环境下,无头 CMS 的出现带来了新的开发模式,尤其是在新型应用场景中或是在对数据互通要求更高的业务中与传统 CMS 相比有着比较大的优势。而 Sanity.io 则在 Headless CMS 领域取得了重要进展。它支持各种类型的文本数据和图像数据,并提供了强大的项目管理和启用简单的 API 通信等特性。通过本文我也希望您能对 Sanity.io 中的 Headless CMS 新特性有更详细的了解,在实际开发中合理地应用使用,从而降低开发复杂度和提升开发效率。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6490173348841e9894e415a6


猜你喜欢

  • # 如何使用 Babel 将代码转换成 ES5

    如何使用 Babel 将代码转换成 ES5 随着 JavaScript 语言不断发展,新的特性和语法层出不穷。但是由于浏览器兼容性的限制,我们常常需要将新的语言特性转换成 ES5 以确保代码在更多浏览...

    1 年前
  • 在 Cypress 中使用数据驱动

    在 Cypress 中使用数据驱动 Cypress 是一个开源的基于 JavaScript 的前端自动化测试工具,它可以帮助我们用更高效的方式编写和运行测试。而数据驱动测试技术则是一种以数据为基础,对...

    1 年前
  • Next.js 数据预取技术探究

    前言 Next.js 是一个基于 React 的轻量级服务端渲染框架,它可以让 React 应用在浏览器和服务器上都能够快速渲染出页面。 在 Next.js 中,我们可以使用静态生成和服务端渲染两种方...

    1 年前
  • 如何使用 Express.js 构建 RESTful API 接口

    前言 在现代的 Web 开发中,RESTful API 已经成为了非常流行和常用的开发模式,而 Express.js 是一个流行的轻量级 Node.js Web 框架,因为其简单易用和灵活性而在 No...

    1 年前
  • SyntaxError: Unexpected token 的解决方法

    当我们在开发前端项目时,常常会遇到 SyntaxError: Unexpected token 这个错误。这个错误的意思是语法错误,即编写的代码不符合 JavaScript 的语法规范。

    1 年前
  • Jest 快速上手教程

    Jest 快速上手教程 在 JavaScript 前端开发中,对代码进行测试是必不可少的。Jest 是 Facebook 出品的一款前端测试框架,它可以让我们方便快速地编写测试用例和进行测试,同时也可...

    1 年前
  • React Router 中的 SPA 路由管理及其原理

    React Router 是一个 React 应用程序的常用路由解决方案。它允许你将你的 React 应用程序分成多个单独的页面组件,并有效地管理上网时的 URL。

    1 年前
  • Hapi 与 JWT:实现 Node.js Web 应用的可靠身份验证

    在现代 Web 应用程序中,认证和授权是非常重要的组成部分。安全是一个主要的问题,用户的隐私和数据需要得到保护。JSON Web Token(JWT)是一个安全的认证协议,用于验证用户,从而保护 We...

    1 年前
  • ES6 的 Proxy 和 Reflect 对象

    随着前端技术的不断发展,JavaScript 也不断地得到改进,其中,ES6 引入了许多新特性,其中之一就是 Proxy 和 Reflect 对象。这两个对象提供了一种全新的、功能强大的方式来拦截和处...

    1 年前
  • 如何在 React Native 中使用 Socket.io?

    Socket.io 是一个基于 Node.js 的实时通讯库,可以在客户端和服务端之间实现双向通讯。在 React Native 中使用 Socket.io 可以帮助我们构建高度互动的实时应用,比如聊...

    1 年前
  • MongoDB 聚合框架使用教程

    MongoDB 是非关系型数据库中最流行的一种,它具有高性能、可扩展性和易用性等优点。MongoDB 聚合框架是其强大的数据处理工具之一,通过聚合框架可以方便地进行数据分析、筛选和统计等操作。

    1 年前
  • 命令行工具 BCC:Linux 系统的性能优化神器

    在 Linux 系统上进行性能优化是一个复杂的过程,需要使用各种工具和技术进行数据采集和分析。而 BCC(BPF Compiler Collection)是一种命令行工具集,可以让开发者轻松地监控内核...

    1 年前
  • CSS Grid 中的网格单位 fr,你了解吗?

    CSS Grid 中的网格单位 fr,你了解吗? CSS Grid 是一个新的布局系统,它允许我们一次性定义一个完整的网格布局,并且让元素之间更容易地对齐、分布和调整。

    1 年前
  • Docker 容器中如何安装 Flask?

    前言 在前端开发中,常常需要使用后端框架来支持数据交互和业务逻辑的处理。Flask 作为一个轻量级的 Python Web 框架,被广泛应用于小型 Web 应用和 API 开发中。

    1 年前
  • 如何将 ESLint 集成到 VS Code 中

    在前端开发中,代码的规范性和优化性往往是非常重要的。ESLint 是一个常用的 JavaScript 代码检查工具,可以帮助开发者在代码编写阶段就发现问题并进行修复。

    1 年前
  • Fastify+TypeScript:如何避免 TypeError

    在前端开发中,TypeError 是一个可能会遇到的常见问题之一。当我们在使用 JavaScript 或其它动态语言时,一些代码运行时的错误可能会导致一个变量的值不匹配其预期类型,从而产生 TypeE...

    1 年前
  • Kubernetes 中 Ingress 对象的使用方法与应用场景

    前言 Kubernetes 是目前最流行的容器编排平台之一,通过它可以轻松地管理容器化的应用。其中,Ingress 是 Kubernetes 中一个非常重要的对象,它可以帮助我们实现负载均衡、路由转发...

    1 年前
  • ES6 中引入的 let 和 const 关键字及其特性

    在 JavaScript 的发展过程中,ES6(ECMAScript 2015)是一个重要的版本,它为前端开发者带来了许多新特性和语法糖。其中,引入了 let 和 const 关键字,提供了新的变量声...

    1 年前
  • 在 Django 中使用 Server-sent Events 实现长连接推送服务

    随着Web应用的发展,实时性越来越重要。很多时候,需要在服务器端主动将数据推送给客户端,而不是通过客户端的轮询来获取数据。这种技术被称为"长连接",其主要特点是允许服务器和客户端之间保持连接状态,而不...

    1 年前
  • PM2如何实现Node.js应用的自动升级和回滚

    在Web开发中,经常需要对Node.js应用进行升级和回滚。如果手动进行,不仅费时费力,而且容易出错。这时,PM2就能派上用场了。 什么是PM2 PM2是Node.js的进程管理器,可以管理Node....

    1 年前

相关推荐

    暂无文章