Jupyter AI

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

📅 发表日期: 2024年8月15日

分类: 🔗GraphQL API 开发入门

👁️阅读: --

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

变更类型概述

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

创建变更类型的基本结构

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

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对象和一个数组来存储它们:

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 来测试我们的变更类型。

创建一个帖子

mutation {
    createPost(title: "Hello World", content: "This is my first post") {
        id
        title
        content
    }
}

更新一个帖子

mutation {
    updatePost(id: 1, title: "Hello GraphQL") {
        id
        title
        content
    }
}

删除一个帖子

mutation {
    deletePost(id: 1)
}

总结

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

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