变更 - 写入数据

这些是在攻克变更(哈哈)前应该了解的概念:

现在开始了解如何使用 GraphQL“写入”数据。 GraphQL 变更是 GraphQL 查询的类型,可能导致后端“变更”或变化的状态,比如常见的'POST''PUT''PATCH''DELETE'API。

基本变更

由于我们将 Hasura 用于 GraphQL API,因此我们可以在应用程序中进行插入、更新或删除等变更。

我们在待办事项应用程序上下文中尝试这些变更,以了解变更的运作方式。 你从另一个 GraphQL 服务中获得的变更,比如你的 API 团队已自行创建,则会有所不同。

创建待办事项

现在,发送 API 调用,以创建待办事项。 如你所料,这是我们的待办事项应用程序的关键一环。 😉

专业提示: 比方说,我们现在还不知道创建待办事项的 变更的名称。 GraphiQL 来帮你! 转到 GraphiQL,然后点击右侧的“文档”选项卡。 在这里输入“待办事项”,即可看到一个使用待办事项的 GraphQL 查询和类型 列表。 通读它们的说明,很快你就会 发现insert_todos就是你需要的操作。

创建待办事项的变更的标题为insert_todos

mutation {
insert_todos(objects: [{title: "new todo"}]) {
returning {
id
}
}
}
在 GraphiQL 中尝试

变更后返回数据

请注意,待插入的待办事项的数据作为参数发送至insert_todos变更。 但是,变更的“字段”指定了你希望从服务器获得的响应的形状。

假设我们希望在将待办事项作为响应创建后获得整个待办事项对象:

mutation {
insert_todos(objects: [{title: "new todo"}]) {
returning {
id
title
is_completed
is_public
created_at
}
}
}
在 GraphiQL 中尝试

将你插入的内容参数化

对于变更,我们几乎始终必须对参数进行参数化! 我们的应用程序中很少(如有)出现“硬编码”突变。 这是因为要捕获什么数据、如何修改或删除某些内容的参数通常取决于用户的操作。

既然我们已了解如何使用查询变量进行参数化,那么我们应用一下:

# The parameterised GraphQL mutation
mutation($todo: todos_insert_input!){
insert_todos(objects: [$todo]) {
returning {
id
}
}
}
# As a query variable
{
"todo": {
"title": "A new dynamic todo"
}
}

在这里,todos_insert_input是变量$todo的类型,且!用来表示这是个强制输入。

在 GraphiQL 中尝试

稍后,我们将探索更多更新或删除数据的变更。 这是深入了解变更的良好开端!

总结

  • 你可以进行基本的 GraphQL 变更
  • 你可以使用查询变量将动态参数/数据传递至变更

接下来,我们来了解 GraphQL 订阅

Did you find this page helpful?
Start with GraphQL on Hasura for Free
  • ArrowBuild apps and APIs 10x faster
  • ArrowBuilt-in authorization and caching
  • Arrow8x more performant than hand-rolled APIs
Promo
footer illustration
Brand logo
© 2024 Hasura Inc. All rights reserved
Github
Titter
Discord
Facebook
Instagram
Youtube
Linkedin