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也足够了。
由于可以通过代码来管理查询并逐步扩展,因此在大型服务中似乎非常有效。