添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
AI 服务
混合云

探索云技术

了解如何在红帽® 混合云控制台中根据自己的需要使用我们的云产品和解决方案。

产品
培训
合作伙伴 搜索
控制台 文档 服务支持 新增 推荐

推荐

我们会在您浏览时推荐您可能喜欢的资源。现在可以尝试以下推荐:

登录

GraphQL 是一种用于 应用编程接口(API) 的查询语言和服务器端运行时,它可以使客户端准确地获得所需的数据,没有任何冗余。

GraphQL有什么用?

GraphQL 旨在让 API 变得快速、灵活并且为开发人员提供便利。它甚至可以部署在名为 GraphiQL 集成开发环境(IDE) 中。作为 REST 的替代方案,GraphQL 允许开发人员构建相应的请求,从而通过单个 API 调用从多个数据源中提取数据。

此外,GraphQL 还可让 API 维护人员灵活地添加或弃用字段,而不会影响现有查询。开发人员可以使用自己喜欢的方法来构建 API,并且 GraphQL 规范将确保它们以可预测的方式在客户端发挥作用。

有效 API 管理的 7 大关键

API 开发人员使用 GraphQL 创建一个 模式 ,用于描述客户端可通过该服务查询的所有可能数据。

GraphQL 模式由对象类型组成,它表示可以请求哪种对象以及它有哪些字段。

查询 时,GraphQL 会根据模式对查询进行验证。随后,GraphQL 将执行经过验证的查询。

API 开发人员将模式中的每个字段附加到名为 解析器 的函数中。执行期间,系统将调用解析器来生成相应的值。

除了为 API 查询定义和验证语法外(有关概述见 graphql-spec 存储库),GraphQL 把大部分决策权都留给了 API 设计人员。GraphQL 不提供有关如何存储数据或使用哪种编程语言的任何指导;开发人员可以使用PHP( graphql-php )、Scala(Sangria)、Python( Graphene Python )、Ruby( graphql-ruby )、JavaScript( graphql.js )等等。GraphQL 对网络、授权或分页没有任何要求。

从客户端的角度看,最常见的 GraphQL 操作可能就是 查询 修改 。如果按照 创建、读取、更新和删除 (CRUD)模型来审视这些操作,那么查询就等同于 读取 。其他所有操作( 创建、更新 删除 )均视为修改。

红帽资源

想在业务或企业环境中试用 GraphQL?这样做既有优点,也有缺点。

GraphQL 的优点

  • GraphQL 模式会在 GraphQL 应用中设置单一事实来源。它为企业提供了一种整合其整个 API 的方法。
  • 一次往返通讯可以处理多个 GraphQL 调用。客户端可得到自己所请求的内容,不会超量。
  • 严格定义的数据类型可减少客户端与服务器之间的通信错误。
  • GraphQL 具有自检功能。客户端可以请求一个可用数据类型的列表。这非常适合文档的自动生成。
  • GraphQL 允许应用 API 进行更新优化,而无需破坏现有查询。
  • 许多开源 GraphQL 扩展可提供 REST API 所不具备的功能。
  • GraphQL 不指定特定的 应用架构 。它能够以现有的 REST API 为基础,并与现有的 API 管理 工具配合使用。

GraphQL 的缺点

  • 即便是熟悉 REST API 的开发人员,也需要一定时间才能掌握 GraphQL。
  • GraphQL 将数据查询的大部分工作都转移到服务器端,由此增加了服务器开发人员工作的复杂度。
  • 根据不同的实施方式,GraphQL 可能需要不同于 REST API 的 API 管理策略,尤其是在考虑速率限制和定价的情况下。
  • 缓存机制比 REST 更加复杂。
  • API 维护人员还会面临编写可维护 GraphQL 模式的额外任务。

GraphQL 查询示例

想要更好地了解 GraphQL,最好的办法就是看一些查询和响应的示例。我们来看看来自 GraphQL 项目网站 graphql.org 的 3 个示例。

第一个示例显示了客户端如何构建 GraphQL 查询,从而要求 API 以指定的形态返回特定字段。

{
}

GraphQL API 将以 JSON 格式返回如下结果:

{
  "me": {
    "name": "Dorothy"
}

客户端也可以作为 GraphQL 查询的一部分来传递参数,如下例所示:

{
  human(id: "1000") {
    location
}

结果为:

{
  "data": {
    "human": {
      "name": "Dorothy,
      "location": "Kansas"
}

从这里开始,事情变得更加有趣。GraphQL 允许用户定义可复用的片段并分配变量。

假设您需要请求一个 ID 列表,然后为每个 ID 请求一系列记录。借助 GraphQL,您可以构建一个查询,然后通过单个 API 调用来提取所需的所有内容。

查询方式如下:

query HeroComparison($first: Int = 3) {
  leftComparison: hero(location: KANSAS) {
    ...comparisonFields
  rightComparison: hero(location: OZ) {
    ...comparisonFields
fragment comparisonFields on Character {
  friendsConnection(first: $first) {
    totalCount
    edges {
      node {
}


可能生成以下结果:

{
  "data": {
    "leftComparison": {
      "name": "Dorothy",
      "friendsConnection": {
        "totalCount": 4,
        "edges": [
            "node": {
              "name": "Aunt Em"
            "node": {
              "name": "Uncle Henry"
            "node": {
              "name": "Toto"
    "rightComparison": {
      "name": "Wizard",
      "friendsConnection": {
        "totalCount": 3,
        "edges": [
            "node": {
              "name": "Scarecrow"
            "node": {
              "name": "Tin Man"
            "node": {
              "name": "Lion"

如果您是 GitHub 用户,那么使用 GitHub 的 GraphQL Explorer 就能快速上手 GraphQL。

GraphQL 由 Facebook 开发,并于 2012 年首次应用于移动应用。GraphQL 规范于 2015 年实现开源。现在,它受 GraphQL 基金会 监管。

有大量开源项目都涉及 GraphQL。下面的列表虽不详尽,但大致涵盖了一些旨在促进 GraphQL 普及的项目。

  • Apollo :一个包含前端客户端库( Apollo 客户端 )和后端服务器框架(Apollo 服务器)的 GraphQL 平台。
  • Offix :一个离线客户端,即使在无法访问应用的情况下也允许执行 GraphQL 修改与查询。
  • Graphback :一个用于生成支持 GraphQL 的 Node.js 服务器的命令行客户端。
  • OpenAPI-to-GraphQL :一个用于将 OpenAPI 规范或 Swagger 所描述的 API 转换为 GraphQL 的命令行界面和库。
Red Hat logo LinkedIn YouTube Facebook X

产品和服务

工具

试用购买与出售

联系我们

关于红帽

红帽是开放混合云技术的领导者,为企业变革性 IT 和人工智能 (AI) 应用提供一致、全面的基础。作为深受 《财富》500 强企业信赖的顾问 ,红帽提供云、开发人员、Linux、自动化和应用平台技术,以及 屡获殊荣 的服务。

© 2025 Red Hat    |    京ICP备09066747号