8 定义GraphQL架构之创建变更类型

在上一篇中,我们探讨了如何定义GraphQL架构中的查询类型。这一篇将专注于创建变更类型(Mutation Types),这是构建GraphQL API的重要组成部分。变更类型让我们能够对服务器中的数据进行创建、更新和删除等操作。

变更类型概述

在GraphQL中,变更类型用于处理数据的更改。与查询类型不同,查询类型只负责读取数据,而变更类型则允许客户端对数据进行操作。我们可以将变更类型看作是一个函数集合,每个函数负责执行特定的数据操作。

创建变更类型的基本结构

首先,我们需要定义变更类型。变更类型通常使用 type Mutation 来声明。变更操作将包含需要的输入参数,并返回相应的结果。以下是一个基本的变更类型的定义示例:

1
2
3
4
5
type Mutation {
createPost(title: String!, content: String!): Post
updatePost(id: ID!, title: String, content: String): Post
deletePost(id: ID!): Boolean
}

在这个例子中,我们定义了三个变更操作:

  • createPost: 创建一个新的帖子,接受 titlecontent 作为输入,并返回新创建的 Post 对象。
  • updatePost: 更新一个现有的帖子,接受帖子 id 和可选的 titlecontent,返回更新后的 Post 对象。
  • deletePost: 删除一个帖子,接受 id 作为输入,返回一个布尔值表示操作是否成功。

示例:实现变更操作

接下来,我们来实现这些操作。假设我们有一个简单的Post对象和一个数组来存储它们:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
let posts = [];
let idCounter = 1;

const resolvers = {
Mutation: {
createPost: (_, { title, content }) => {
const newPost = { id: idCounter++, title, content };
posts.push(newPost);
return newPost;
},
updatePost: (_, { id, title, content }) => {
const post = posts.find(p => p.id === id);
if (!post) throw new Error('Post not found');
if (title) post.title = title;
if (content) post.content = content;
return post;
},
deletePost: (_, { id }) => {
const index = posts.findIndex(p => p.id === id);
if (index === -1) throw new Error('Post not found');
posts.splice(index, 1);
return true;
}
}
};

在上述代码中,我们定义了一个 resolvers 对象,其中包含了我们为 Mutation 定义的三个操作的逻辑。注意,每个操作都是一个函数,接受必要的参数并返回相应的结果。

测试变更操作

现在我们可以测试这些变更操作。假设我们使用的是 Apollo Server,可以通过 GraphQL Playground 或 Postman 来测试我们的变更类型。

创建一个帖子

1
2
3
4
5
6
7
mutation {
createPost(title: "Hello World", content: "This is my first post") {
id
title
content
}
}

更新一个帖子

1
2
3
4
5
6
7
mutation {
updatePost(id: 1, title: "Hello GraphQL") {
id
title
content
}
}

删除一个帖子

1
2
3
mutation {
deletePost(id: 1)
}

总结

通过本节的学习我们定义了 Mutation 类型,并实现了基本的创建、更新和删除操作。变更类型为我们的 GraphQL API 提供了数据写入能力,与查询类型相辅相成。

在下一篇文章中,我们将讨论如何定义子类型与枚举,以进一步丰富我们的 GraphQL 架构。如果您对本章内容有任何问题或疑虑,欢迎随时讨论!

8 定义GraphQL架构之创建变更类型

https://zglg.work/graphql-api-dev-zero/8/

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论