GraphQL 是一种用于 API 的查询语言,它可以让客户端精确地指定需要的数据,避免了传统 REST API 的过度获取或者不足的问题。在 GraphQL 中,Mutation 是一种用于修改数据的操作,可以理解为是 REST API 中的 POST、PUT、DELETE 等操作。本文将介绍 GraphQL Mutation 的实现方法和场景。
Mutation 的实现方法
Mutation 与 Query 类似,都是通过定义 Schema 来实现。在 GraphQL 中,我们可以通过定义 Mutation 类型来定义 Mutation。下面是一个简单的 Mutation 定义示例:
type Mutation { addUser(name: String!, age: Int!): User }
在上面的 Schema 中,我们定义了一个 addUser Mutation,它接收两个参数 name 和 age,然后返回一个 User 类型的对象。下面是一个 addUser Mutation 的实现示例:
const { GraphQLObjectType, GraphQLString, GraphQLInt, GraphQLNonNull } = require('graphql'); const UserType = require('./UserType'); const db = require('./db'); const MutationType = new GraphQLObjectType({ name: 'Mutation', fields: { addUser: { type: UserType, args: { name: { type: new GraphQLNonNull(GraphQLString) }, age: { type: new GraphQLNonNull(GraphQLInt) }, }, resolve(parent, args) { const user = { id: db.users.length + 1, name: args.name, age: args.age }; db.users.push(user); return user; }, }, }, }); module.exports = MutationType;
在上面的代码中,我们首先引入了需要的依赖和类型定义,然后定义了一个 MutationType 类型,它包含了一个 addUser Mutation。在 addUser 的实现中,我们首先创建了一个新的用户对象,然后将它添加到 db 中,最后返回这个新的用户对象。
Mutation 的场景
Mutation 主要用于修改数据,常见的场景包括:
添加数据
例如上面的 addUser Mutation,它可以用于添加一个新的用户。
更新数据
我们可以通过 Mutation 来更新某个对象的属性。例如,下面是一个更新用户年龄的 Mutation:
type Mutation { updateUserAge(id: ID!, age: Int!): User }
删除数据
我们也可以通过 Mutation 来删除某个对象。例如,下面是一个删除用户的 Mutation:
type Mutation { deleteUser(id: ID!): User }
复杂操作
有些场景下,我们需要进行一些复杂的操作,例如批量修改或者删除数据。这时候,我们可以通过 Mutation 来实现。例如,下面是一个批量删除用户的 Mutation:
type Mutation { deleteUsers(ids: [ID!]!): [User] }
在上面的 Mutation 中,我们接收一个 ids 参数,它是一个 ID 数组,表示需要删除的用户 ID。最后返回一个 User 数组,表示删除成功的用户列表。
总结
Mutation 是 GraphQL 中用于修改数据的操作,可以用于添加、更新、删除数据等场景。我们可以通过定义 Mutation 类型来实现 Mutation,然后在 resolve 函数中编写具体的实现。如果你想更深入地了解 GraphQL,可以去官网查看更多文档和示例。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658b835ceb4cecbf2d0c3218