GraphQL: 一种现代的API查询语言

在技术领域,GraphQL作为一种新兴的API查询语言,正在逐渐受到开发者社区的关注。它由Facebook在2012年内部开发,并在2015年10月公开发布。GraphQL不仅是一种查询语言,它还是REST及其变体的替代品。本文将帮助理解GraphQL的基本概念,并展示其与REST和HTTP的差异。

什么是GraphQL?

GraphQL是由Facebook在2012年内部开发的一种查询语言,旨在通过直观、灵活的语法和系统来构建客户端应用程序,描述其数据需求和交互。它提供了一种从后端查询数据并更改数据的语言。简而言之,GraphQL是由Facebook创建的一种查询语言,它规定了如何从API请求数据。

GraphQL的基础知识

GraphQL有三种高级操作:

  • 查询(Queries):用于获取数据,类似于REST中的GET方法。
  • 变更(Mutations):用于创建/修改数据,然后获取数据,类似于REST中的POST、PUT、DELETE方法。
  • 订阅(Subscriptions):长连接,用于从服务器接收数据更新,类似于WebSocket。

这些操作通过定义API能力的模式暴露出来。模式由类型组成。开发者定义的模式决定了GraphQL API的能力。每个GraphQL API可以有两种类型:

  • 根类型,例如查询(query)、变更(mutation)、订阅(subscription)。
  • 用户定义类型,例如待办事项(todo)、人类(human)、动物(animal)等。

每个GraphQL API都会有一个查询类型,并且可能有或没有变更和订阅类型。根类型决定了GraphQL查询的入口点。

GraphQL示例查询

{ human(id: 101) { name age } }

上述查询执行以下操作:

  • 从根对象开始。
  • 选择id为101的人类字段。
  • 对于返回的英雄对象,选择名称和年龄字段。

查询的结果将是:

{ "data": { "human": { "name": "John Doe", "age": 20 } } }

为了使上述查询工作,必须在模式中添加一个人类类型,它由它可以返回的字段组成。根查询和人类的类型如下:

type Human { name: String! age: Int! } type Query { human(id: ID!): Human }

类型的字段需要返回一些数据。这在GraphQL中是通过一个称为GraphQL解析器的概念来实现的。这是一个函数,它要么调用数据源,要么触发返回一些值(例如单个记录或记录列表)。

GraphQL的优势

GraphQL带来了许多优势,包括更好的数据检索、更好的版本控制、更好的响应数据控制和数据聚合能力。以下是一些GraphQL的优势:

  • 更好的数据检索:查询数据非常简单,减少了服务器往返次数。
  • 更好的版本控制:在RESTAPI中,如果资源有新字段或更改,必须创建新版本的端点。GraphQL允许用户在不破坏现有内容的情况下动态添加新字段。
  • 更好的响应数据控制:前端可以控制它请求的数据,这可以用于任何GraphQL API。
  • 数据聚合:可以轻松地从不同来源聚合数据,并将其提供给用户,而不是从前端或后端进行多个REST调用。

重要资源

作为程序员,可能渴望尝试GraphQL。以下是一些有用的工具和库,可以帮助更轻松地使用GraphQL:

  • graphql:在JS中实现GraphQL
  • Apollo:GraphQL的工具包。它为多个平台提供了服务器实现。
  • Prisma:将数据库转换为GraphQL API的工具。它支持多个数据库。
  • Scaphold:托管的GraphQL后端。
  • AWS AppSync:完全托管的AWS GraphQL服务器,可以连接到多个数据源。

GraphQL非常强大,具有很大的潜力,但仍然处于起步阶段。然而,在很短的时间内,它已经获得了很多关注,并被社区广泛采用。GraphQL的普及清楚地表明了它的易用性和重要性。这里讨论的好处只是在使用它时的一些经验。随着系统的发展,相信会有更多的好处被发现——GraphQL可以利用的生态系统非常庞大。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485