GraphQL 是一种用于 API 的查询语言,它提供了一种更高效、强大和灵活的方式来获取数据。除了查询(Query)操作外,GraphQL 还支持修改(Mutation)操作。本文将介绍如何在 GraphQL 中添加 Post 请求(Mutation)以及如何传递参数。
什么是 Mutation
Mutation 是 GraphQL 中的一种操作类型,用于修改数据。与查询(Query)不同,Mutation 可以修改服务器上的数据,例如创建、更新或删除数据。
Mutation 的语法与 Query 类似,但是需要使用 mutation
关键字。下面是一个简单的 Mutation 示例:
-------- - ----------------- - ----- -------- ---- -- -- - -- ---- --- - -
这个 Mutation 用于创建一个名为 Alice 年龄为 25 的用户,并返回其 ID、姓名和年龄。
如何添加 Mutation
要在 GraphQL 中添加 Mutation,首先需要定义 Mutation 的类型。在 GraphQL Schema 中,可以使用 type Mutation
来定义 Mutation 类型。下面是一个简单的 Mutation 类型定义示例:
---- -------- - ----------------- ------------------ ----- -
在上面的示例中,createUser
是一个 Mutation 操作,它接受一个 CreateUserInput
类型的参数,并返回一个 User
类型的对象。
接下来,需要在 GraphQL Resolver 中实现 createUser
操作。Resolver 是一个函数,用于处理 GraphQL 操作。下面是一个简单的 Resolver 示例如下:
--------- - ----------- -------- - ----- -- - -- -- -- - ----- ------- - - --- --------- -------- -- ----------------------- ------ -------- - -
在上面的示例中,createUser
Resolver 接受三个参数:
parent
:父级对象,通常用于处理嵌套查询。input
:Mutation 操作的参数。context
:一个包含上下文信息的对象,例如数据库连接。
在 Resolver 中实现了 createUser
操作,它将接受一个 input
参数,并将其添加到数据库中。
如何传递参数
在 GraphQL 中,可以使用输入类型(Input Type)来传递参数。输入类型类似于对象类型,但是只包含输入参数,而不包含查询结果。
下面是一个简单的输入类型定义示例:
----- --------------- - ----- ------- ---- ---- -
在上面的示例中,CreateUserInput
是一个输入类型,它包含两个必填字段:name
和 age
。
在 Mutation 中使用输入类型可以简化参数的传递。下面是一个使用输入类型的 Mutation 示例:
-------- - ----------------- - ----- -------- ---- -- -- - -- ---- --- - -
在上面的示例中,createUser
Mutation 接受一个 input
参数,该参数是一个 CreateUserInput
类型的对象。
在 Resolver 中可以通过解构 input
参数来访问输入类型的字段。下面是一个使用输入类型的 Resolver 示例如下:
--------- - ----------- -------- - ----- -- - -- -- -- - ----- ------- - - --- --------- -------- -- ----------------------- ------ -------- - -
在上面的示例中,input
参数被解构为 name
和 age
两个字段。
总结
Mutation 是 GraphQL 中的一种操作类型,用于修改数据。要添加 Mutation,需要在 GraphQL Schema 中定义 Mutation 类型,并在 Resolver 中实现 Mutation 操作。在 Mutation 操作中,可以使用输入类型来传递参数。
以上是 GraphQL 中添加 Post 请求(Mutation)及带参数的介绍,希望对你有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65cdc797add4f0e0ff6f2c28