GraphQL 101

183 阅读4分钟

GraphQL介绍

GraphQL 介绍

GraphQL 是由 Meta 在 2012 年开发并在 2015 年开源的一个数据查询语言。与传统的 REST API 相比,GraphQL 提供了一种更灵活和高效的数据查询方法。GraphQL 的核心思想是允许客户端指定所需的数据结构,从而减少了数据过载和多次请求的需求。而传统的REST API更多的由服务端来制定数据交互的标准。

什么是 GraphQL?

GraphQL 是一种用于 API 的查询语言以及一个用于运行这些查询的服务器端运行时环境。后端运行时环境一般称为GraphQL Server,客户端一般称为GraphQL Client。

GraphQL需要Client来明确的声明需要的数据,这个客户端可以不同的页面部分声明不同的字段来灵活的数据查询。

特别的,GraphQL本身和React,ReactNative都能很好的搭配,一套GraphQL接口能够同时在不同的客户端消费,极大的提高了生产力。

GraphQL 的核心概念

1. Schema

GraphQL Schema 定义了 API 的类型结构。它描述了数据的形状以及客户端可以查询哪些字段。Schema 是用一种称为 GraphQL SDL(Schema Definition Language)的语言定义的。一个简单的 GraphQL Schema 可能如下所示:


type Query {
  book(id: ID!): Book
}

type Book {
  id: ID!
  title: String
  author: Author
}

type Author {
  id: ID!
  name: String
  books: [Book]
}

所有的Schema都包含Query类型,而Query内部定义的方法一般称为graphql field。Schema是客户端和服务端交互的唯一事实标准。

作为服务端,需要实现Schema定义的各种各样的field。

作为客户端,需要基于Schema定义的field来进行查询。

2. 查询(Query)

GraphQL 查询允许客户端请求他们所需要的数据。一个查询的例子如下:

{
  book(id: "1") {
    title
    author {
      name
    }
  }
}

这个查询请求 ID 为 1 的书的标题以及该书作者的名字。服务器将返回如下结构的数据:

jsonCopy code
{
  "data": {
    "book": {
      "title": "GraphQL Basics",
      "author": {
        "name": "John Doe"
      }
    }
  }
}

3. 变更(Mutation)

变更用于修改服务器上的数据。它类似于 REST API 中的 POST、PUT、DELETE 等操作。一个变更的例子如下:

graphqlCopy code
mutation {
  addBook(title: "GraphQL Basics", authorId: "1") {
    id
    title
    author {
      name
    }
  }
}

这个变更添加了一本新书,并返回新书的 ID、标题和作者的名字。

4. 订阅(Subscription)

订阅允许客户端订阅特定的事件并在事件发生时接收实时更新。订阅通常用于实时应用,例如聊天应用或实时数据仪表板。一个简单的订阅如下:


subscription {
  bookAdded {
    id
    title
    author {
      name
    }
  }
}

当有新书添加时,客户端将接收到包含新书信息的更新。

GraphQL 的优势

1. 减少数据过载

在 REST API 中,客户端可能需要请求多个端点以获取所需的所有数据,这可能导致数据过载和性能问题。GraphQL 允许客户端在一次请求中获取所有需要的数据,从而减少了数据过载。

2. 灵活性

GraphQL 允许客户端明确地声明他们需要的数据结构。这样,客户端可以精确地获取所需的数据,而不是依赖服务器返回的预定义数据结构。

3. 强类型系统

GraphQL 使用强类型系统来定义 API 的结构。这有助于在开发过程中捕捉错误,并提供更好的工具支持,如代码补全和静态分析。

4. 自文档化

由于 GraphQL Schema 定义了 API 的所有类型和字段,API 是自文档化的。开发人员可以使用工具(如 GraphiQL 或 Apollo Studio)来浏览 Schema 并进行交互式查询。

总结

GraphQL 提供了一种灵活、高效的数据查询方法,解决了传统 REST API 中的一些问题。它允许客户端明确地声明所需的数据结构,减少了数据过载,并提供了强类型系统和自文档化的优势。通过使用 GraphQL,开发人员可以更高效地构建和维护 API,从而提高应用程序的性能和用户体验。

在实施 GraphQL 时,选择合适的服务器和客户端库至关重要。无论是使用 Apollo Server、GraphQL.js、graphql-go 还是其他实现,都可以根据项目需求和技术栈选择最佳的解决方案。同样,客户端可以选择 Apollo Client、Relay 或 urql 等库,以满足具体的需求。

通过深入理解和应用 GraphQL,开发人员可以显著提升 API 的开发效率和灵活性,为用户提供更好的服务。

在接下来的文章我会分享如何利用Go + Ent + gqlgen框架快速搭建一个GraphQL服务。