【中文翻译】GraphCMS和Contentful之间的比较

首先

以下是一篇翻译自GraphQL的CMS,GraphCMS官方博客的Fabian Beliza先生于2017年12月13日发布的文章。

Contentful和GraphCMS都是被称为无头CMS的一种服务。前者通过REST API访问信息,而后者使用称为GraphQL的查询语言。原文详细解释了它们各自的优点和缺点,并附有具体示例。

原文标题:GraphCMS vs. Contentful – API 视角
Chinese paraphrase: GraphCMS 与 Contentful – API 视角比较

This passage.

尽管Contentful在内容管理系统市场上的地位十分强大,这种趋势还将持续一段时间。然而,不能断言在使用过程中不会出现问题或感到困扰。举例来说,可能存在SDK上的问题,以及许多工程师渴望使用REST的替代品。

在这篇文章中,我们将对Contentful的REST API和GraphQL进行比较,并从各种角度揭示它们各自的优缺点。

API

GraphCMS 和 Contentful 之间的主要区别在于它们的 API 技术。GraphCMS 使用了由 Facebook 开发的开源 API 查询语言 GraphQL,而 Contentful 则使用了在分布式处理中产生的标准 REST。毫无疑问,REST 是一项标准技术,但是 GraphQL 也受到了近年来许多开发者的关注和关注。

就数据的获取和传输而言,它们在与API一起使用方面都是相似的,广泛应用于前端领域。但实际上,它们有非常大的区别。

DataModel.png

查询

内容交付API – Contentful

如果您经常使用REST API查询,那么查询结果会根据不同的情况而有所不同。首先,让我们来看一看Contentful的四个主要API之一——内容传递API。

顺便提一下,我们还有其他的功能,包括内容管理、内容预览以及图片API。它们分别扮演着显示条目、创建和删除内容、预览草稿以及交换图片等不同的角色。

contentful_request.png

“spaces”后面的字符串表示我测试空间的ID,“entries”指示将所有条目发送到该空间的命令。

contentful_response_entries.png
GraphQL – GraphCMS

GraphQL是一种用于API查询和操作数据的查询语言,而GraphCMS是一个提供GraphQL API的内容管理系统。

simple_graphql_query1.png

关于已经提到的,包含League、Division、Team、Player和Stadium模型的例子,可以通过这个查询来询问所有内容。表面上,这似乎是比以简单一行表示的REST的GET请求更复杂的方式。然而,这里所做的只是定义API返回数据的结构。换句话说,它允许我们知道返回的响应是什么样的,而不需要向任何人询问。

graphiql.png
graphql_response1.png

如果想要减少获取的数据,例如不需要玩家的姓氏,可以通过从查询中删除该字段将其从响应中删除。如果需要更多的数据,则可以在查询中添加必要的字段。这将为开发人员消除在多平台数据结构不同的情况下的不必要工作量,例如网络客户端和移动客户端等。

增加內容

休息
contentful_post.png

如果成功,将返回新创建条目的内容、系统字段和元数据作为响应。

REST的一个主要缺点是无法使用单个查询来创建嵌套或相关联的条目。每次添加相关条目都需要一个新的查询,并且还需要额外的查询来关联它们。

GraphQL (一种查询语言)
image.png
image.png
image.png

我們將嘗試使用一些參數來創建團隊的變異,如上所述。第一個參數(第三行)表示團隊所屬的 division 的 ID。接下來,我們將 teamName 設置為 Team 的字段。然後,我們創建了一個新的 Studiam,並將其與 Team 相關聯。最後,我們自動創建了一個與團隊相關聯的新玩家。

而不是發送大量的 REST 請求,我們只需要調用一個 API 就能完成所有的事情。這是因為所有的模型已經與關聯建立起來了。

如果要通过REST API执行相同的操作,您需要发送请求以创建所需的各个条目,以及发送请求来创建相应的正确关联。这不仅是一项非常繁重的工作,而且代码的复杂度也会不断增加。

顺便提一下,Contentful提供了称为Links的嵌套结构查询。通过使用Links,您可以将两个不同的模型实体进行关联。例如,如果想将player和team关联起来,可以通过发送包含以下内容的请求来实现。

{
  "sys": {
    "type": "Entry",
    "id": "<playerId>"
  },
  "fields": {
    "teamName": {
      "en-US": {
        "sys": {
          "type": "Link",
          "linkType": "Entry",
          "id": "<teamId>"
        }
      }
    }
  }
}

筛选

在所有的查询API中,过滤是必不可少的。并不总是需要所有的条目信息。例如,可能只需要最新的博客文章或特定的团队信息等。

休息
image.png
image.png

这个URL并不是非常简单,但仍然相对简单,并且成功地返回了所需的信息。

图灵处理的GraphQL

现在,让我们来看一下GraphQL最有趣的地方。通过将GraphQL的高度灵活的查询与过滤结合在一起,您可以完全控制信息。然而,请注意过滤逻辑并非内置于GraphQL中,而是需要在服务器端实现。因此,在GraphCMS中的过滤可能与其他GraphQL服务或服务器有所不同。

Graphcms_filter.png

关于这一点,在GraphCMS上可以通过API Explorer来轻松了解可以使用哪些过滤器。

Graphcms_filter_response.png

結論:

无论是哪种CMS,它们都拥有广泛的API工具,并且具有无限的可能性。

Contentful通过适当的维护REST API来实现其功能,但它始终是REST。即使是执行简单的请求也变得越来越复杂,并且在处理许多尤其是关系型数据时可能会变得令人厌烦。

GraphQL非常擅長處理這樣的場景,開發者的體驗將大幅改善。GraphQL是一個容易被任何人理解的概念,同時也非常有趣。對於需要創建具有嵌套結構的數據或更複雜操作的情況,理解和實現也變得更加容易。

最后,选择哪一个取决于个人。如果你喜欢使用REST来发送请求并访问数据,那么使用Contentful可能会让你变得幸福。如果你希望简单的查询和设置,并寻求更先进的体验,那么GraphQL是值得一试的。如果你需要头部无关的CMS,我们很乐意帮助你与GraphCMS搭配使用!

首个真正的多平台无头 CMS

虽然Contentful拥有许多软件开发工具包(SDK),但使用起来仍然并不容易,并且可能存在技术上不符合时代潮流的情况。

GraphQL是一项真正多平台运行的技术,它首次实现了这一目标。如果在前端架构中使用JSON通信,那就一定要使用GraphQL。无论是冰箱、智能手表,甚至汽车和VR耳机,都可以通过更少的努力获取所需的数据格式。如果您对此仍然不感兴趣,那么再也没有什么可做的了…

最后的话

如果你对这篇文章对GraphCMS产生了兴趣,请随时在我们的Slack频道、Twitter或网站聊天中联系我们。

此外,请务必亲眼目睹我们的产品。GraphCMS的免费计划只要是在业余兴趣或项目试用范围内,将永远免费。详细信息请参阅此价格表。

这篇文章到此结束了。

填充

以下是GraphCMS企业经理Alexander Naydenov先生提供的补充说明。

Contentful现在也有alpha/beta阶段的GraphQL API – 可在其企业计划中使用,基于REST API构建。它不允许进行写操作(即GraphQL mutations)。

目前,Contentful已经可以使用alpha/beta版本的GraphQL API,但目前不支持写入操作(即GraphQL中的mutations)。

再者,我們還有其他有價值的文章要介紹給大家。

    • GraphQL Makes for the Best CMS

 

    What Does “Headless CMS” Mean?

非常感谢您阅读至最后。如果有错误或其他问题,如果您能指出,我将不胜感激。
(此文章已获得Alexander Naydenov氏授权发布)

bannerAds