GraphQL是什么?

因为在参与的一个项目中,我第一次开始使用GraphQL,所以我写了一篇关于它的文章。

GraphQL是一种用于查询和操作API的查询语言。

这是由Facebook在2015年开发的查询语言。虽然与REST API所做的事情几乎相同,但GraphQL在数据通信量方面更加轻便,这是它的优势之一。它可以确保不会获取不必要的值,并且可以防止进行两次通信。通过在源代码中定义的代码,可以在客户端和服务器之间灵活地传递数据。

GraphQL被设计成使WEB/移动应用程序(HTTP客户端)的开发者能够通过调用API从后端API精确获取所需数据,其特点是将查询POST到相同的HTTP端点上。

在客户端服务器上,GraphQL的处理流程如下。

・GraphQL查询具有与所需的JSON类似的格式,但不是JSON。因此,客户端将创建“POST”请求并将GraphQL查询以字符串形式发送到服务器。
・服务器接收JSON对象并提取查询字符串。根据GraphQL的语法和图形数据模型(GraphQL模式),服务器执行GraphQL查询的处理和验证。
・与通常的API服务器一样,GraphQL API服务器调用数据库和其他服务来获取客户端请求的数据。
・服务器获取数据,将其转换为JSON对象,然后返回给客户端。

代码示例

type Root {
    person(id: ID): Person
}

type Person {
    id: ID
    name: String
    birthYear: String
    gender: String
    friendConnection: PersonfriendsConnection
}

type PersonfriendsConnection {
    friends: [Friend]
}

type Friend {
    name: String
    place: String
    relationship: String
}

說明

・根(Root)作为一个类型,从这里开始向服务器发起查询请求。
・根(Root)具有person函数,该函数返回指定id的个人(Person)。
・个人(Person)拥有id、name、birthYear等字段。
・个人(Person)的friendConnection字段是一个PersonfriendsConnection类型,表示个人(Person)的朋友(Friends)数组。
・朋友(Friend)具有name、place等字段。

感受

我在过去只使用过REST API。
通过引入GraphQL,代码传输量会减少,因此用户响应会变得稍微快一些。
然而,由于实现上会变得稍微复杂一些,所以只有在必要的情况下才考虑引入,但如果服务不太关注显示速度,一般的REST API也足够了。

由于可以通过代码来管理查询并逐步扩展,因此在大型服务中似乎非常有效。

bannerAds