现代 API 的查询语言

  • 类型安全的模式,安全的请求

  • 无摩擦分布式开发

  • 大规模数据驱动型用户界面

介绍

什么是 GraphQL?

GraphQL 是一个开源的 API 查询语言和服务器端运行时环境。它提供强类型模式来定义数据之间的关系,从而使 API 更灵活、更可预测。而且它不依赖于特定的数据库或存储引擎 —— 它可以与你现有的代码和数据协同工作,使 API 的后续演进更加轻松。

query getCity($city: String) {
  cities(name: $city) {
    population
    weather {
      temperature
      precipitation
    }
  }
}
学习 GraphQL
工作原理

GraphQL 查询

  1. 描述你的数据
    type Project {
      name: String!
      tagline: String
      contributors(first: Int, after: ID): [User!]!
    }
  2. 提出你的要求
    {
      project(name: "GraphQL") {
        tagline
      }
    }
  3. 获得可预测的结果
    {
      "project": {
        "tagline": "A query language for APIs"
      }
    }

Press CtrlSpace to open the completions menu, CtrlEnter to run the query.

商业视角

适用于初创企业和企业的成熟解决方案

最佳用户
体验

大规模提供高性能用户体验。全球领先的应用都使用 GraphQL 来创建更快、响应更灵敏的数字体验。

  • 更快的数据检索和加载速度
  • 提高带宽效率

稳定与
安全

在确保数据使用情况完全透明的同时,保护你的 API。GraphQL 使你能够监控、保护和优化 API 使用,同时确保合规性。

  • 更严格的访问控制
  • 改进商业智能和成本分析

高效的分布式
开发

GraphQL 灵活且解耦的架构,让你的团队能够更快地交付产品。GraphQL 支持前端和后端团队独立高效地协作。

  • 更快速的迭代
  • 改善跨团队协作
了解更多关于 GraphQL 的信息
设计原则

GraphQL 的五大支柱

以产品为中心

GraphQL 完全是为前端工程师设计的,符合他们的思维方式、视图结构和数据使用方式。

层级式

大多数产品开发都涉及视图层级的创建和操作。GraphQL 查询反映了 UI 结构,确保能够以自然的方式请求与响应结构相匹配的数据。

强类型

每个 GraphQL 服务都定义了一个类型系统,使工具能够在执行查询之前对其进行语法验证,从而确保响应的可预测性。

客户端指定的响应

GraphQL 服务会发布其客户端可以使用的功能。与传统的固定端点不同,客户端可以控制接收的数据,仅请求字段级别的所需数据。

自文档化

GraphQL API 可以自我描述,允许工具和客户端查询模式以获取可用类型和功能。它为构建通用工具和客户端软件库提供了一个强大的平台。

GraphQL 的优势

精确

提出你的需求,你就能得到你想要的。

向你的 API 发送 GraphQL 查询,即可精确获取你请求的数据 —— 既不会过度获取数据,也不会获取数据不足。可预测的响应确保应用高效运行。

优化

在一次请求中检索多个资源

GraphQL 能够无缝地处理数据之间的关系,从而避免多次 API 调用。传统的 REST API 需要从多个 URL 加载数据,而 GraphQL API 只需一次请求即可获取应用所需的所有数据。这非常适合处理复杂查询和优化网络性能。

生产率

借助功能强大的社区构建工具,更快地行动。

无需离开编辑器即可准确了解你可以请求的内容。在发送查询之前突出显示潜在问题,并利用增强的代码智能。GraphQL 让构建强大的工具变得轻而易举。其中许多工具,例如 GraphiQL,都是开源的,并且由 GraphQL 社区构建。

一致性

使用类型安全的模式自信地构建

GraphQL API 的架构围绕类型和字段展开,而非端点。这确保了数据的一致性、自文档化以及清晰可控的错误信息。应用可以利用类型来避免编写手动解析代码。

无版本

无需版本即可进化

添加新字段和类型而不影响现有查询。弃用过时的字段,同时保持 API 的简洁性和面向未来的特性。通过使用单一的演进版本,GraphQL API 使应用能够持续访问新功能,并鼓励编写更易于维护的服务器代码。

一体化

请自带数据和代码

GraphQL 与存储无关——它可以将数据库、REST API 和第三方服务集成到一个统一的数据层中。你可以编写利用现有数据的 GraphQL API,并使用多种语言提供的 GraphQL 引擎进行编码。

数据托管

数据托管

GraphQL 片段允许你在每个组件附近定义其数据需求,并通过单个查询满足这些需求。

Server
<FriendList>
<FriendListItem>
<FriendInfo/>

Click onHover over the components to see their GraphQL fragments.

Friends

  • Trudie
    120 mutual friends
    username
    funkytrudster89
    email
    trudie@mail.com
    location
    New York, USA
  • Frances
    42 mutual friends
    username
    frannyfran12
    email
    frances@mail.com
    location
    Madrid, Spain
  • Fernando
    114 mutual friends
    username
    fern_whirlwind
    email
    fernando@mail.com
    location
    Amsterdam, Netherlands
query GetFriendList {
  ...FriendList
}
 
fragment FriendList on Query {
  friends {
    ...FriendListItem
  }
}
 
fragment FriendListItem on Friend {
  name
  profilePic
  mutualFriendsCount
  isSubscribed
  ...FriendInfo
}
 
fragment FriendInfo on Friend {
  username
  email
  location
}

GraphQL 适合我吗?

选择与你的项目最相关的用例,了解 GraphQL 如何帮助您构建更快、更现代化的解决方案。

拥有众多服务的大型后端

GraphQL 作为跨多个服务的统一数据层,简化了 API 管理,减少了团队间的依赖关系。它能够高效地获取数据,同时保持 API 接口的灵活性和可维护性。