为什么数据驱动型企业在AI方面更加成功
如何定义 GraphQL 查询和突变?
GraphQL 是 Facebook 开发的一种数据查询和操作语言。使用 GraphQL,您可以精确地获得所需的数据,不多也不少。此外,您只需使用一个入口点(即 /graphql)即可获取数据。
GraphQL架构
GraphQL 模式是 GraphQl 应用程序接口的蓝图。它描述了我们可以从 API 中查询哪些数据,以及 API 将如何返回数据。
您定义的模式描述了您在应用程序中可能需要查询的所有数据。模式还指定了应用程序可以用来读取或更新服务器上数据的查询和突变。
设计GraphQL查询
让我们一起来看看如何在 GraphQL 模式中定义查询。
对象类型
一切从对象类型开始。首先,我们要定义要查询的对象类型并添加相关字段。假设我们要创建一个获取电影的 API。让我们定义一个如下所示的 “movie “对象类型:
type Movie {
id: Int!
title: String!
description: String
}
在这里,Movie 是一个对象类型,其字段包括 id、标题和描述。感叹号(!)因此,该类型中 id 和 title 是必填字段,而 description 是可选字段。
查询类型
它是一种特殊的对象类型,为查询提供入口点。所有查询都在该对象中定义。
type Query{
# Define queries here
}
获取 API 中的所有电影,我们将定义一个 movie 查询:
type Query {
movies: [Movie!]!
}
如您所见,我们还将查询返回的数据指定为 [Movie!]!。这种语法意味着它将始终返回一个数组,而数组中的每个元素都是一个 movie 对象。
现在,如果我们想获取一部特定的电影怎么办?我们可以这样定义 movie 查询:
type Query {
movies: [Movie!]!
movie(id: Int!): Movie
}
movie 查询需要一个 id 参数,即我们要获取的 movie id。然后返回一个 movie 对象。
用法
现在,我们可以这样使用这些查询:
# Fetches all the movies
query movies {
id
title
description
}
# Fetches a particular movie
query movie(id: 200) {
id
title
description
}
定义 GraphQL 突变
与查询一样,您可以在突变类型中定义突变
突变类型
比方说,我们希望允许一个突变来创建一部新 movie。我们可以这样定义 create Movie 突变:
type Mutation {
createMovie(title: String!, description: String): Movie
}
它将接受标题和描述并创建一部新 movie。最后,它会在响应中返回一个新添加 movie 的 Movie 对象。
用法
我们可以这样使用突变:
query createMovie(title: "The Matrix", description: "A computer hacker learns from mysterious rebels about the true nature of his reality and his role in the war against its controllers.") {
id
title
description
}
如果我们运行这个突变,API 将返回这样的数据:
{
"data": {
"createMovie": {
"id": 200,
"title": "The Matrix",
"description": "A computer hacker learns from mysterious rebels about the true nature ofhis reality and his role in the war against its controllers."
}
}
}
就是这样。您可以看到,在模式中定义查询和突变是多么容易。现在,您只需创建解析器函数来处理它们,您的 API 就可以正常运行了。