操作
这是 GraphQL 库版本 6 的文档。有关长期支持 (LTS) 版本 5,请参阅 GraphQL 库版本 5 LTS. |
此页面展示了一些 GraphQL 查询,以及如何触发不同身份验证和授权规则的评估。
每行相关代码都有一个注释,例如 CREATE ON OBJECT Movie
,这意味着将评估以下身份验证指令
type Movie @authentication(operations: [CREATE]) @node {
title: String!
actors: [Actor!]! @relationship(type: "ACTED_IN", direction: IN)
}
这同样适用于指令没有参数的情况,因为 |
以下示例适用于 @authentication
指令,也适用于 @authorization
指令中的任何规则。
示例
查询
对于简单的查询,在读取任何类型时都会评估操作中带有 READ
的规则
query {
movies { # READ ON OBJECT Movie
title # READ ON FIELD_DEFINITION Movie.title
actors { # READ ON OBJECT Actor
name # READ ON FIELD_DEFINITION Actor.name
}
}
}
变异
对于 create
变异,在创建每个节点时都会评估对象上的 CREATE
规则,以及字段定义规则
mutation {
createMovies(input: [
{ # CREATE ON OBJECT Movie
title: "The Matrix" # CREATE ON FIELD_DEFINITION Movie.title
}
]) {
movies { # READ ON OBJECT Movie
title # READ ON FIELD_DEFINITION Movie.title
}
}
}
对于单个 delete
变异,将评估对象上的 DELETE
规则
mutation {
deleteMovies(where: { title_EQ: "The Matrix" }) { # DELETE ON OBJECT Movie
nodesDeleted
}
}
对于带有嵌套删除操作的 delete
变异,将评估操作为 DELETE
的规则
mutation {
deleteMovies( # DELETE ON OBJECT Movie
where: { title_EQ: "The Matrix" }
delete: { actors: { where: { node: { name_EQ: "Keanu" } } } } # DELETE ON OBJECT Actor
) {
nodesDeleted
}
}
对于具有许多效果的复杂 update
变异,将评估各种规则,以及选择集的 READ
规则
mutation {
updateMovies(
where: { title_EQ: "The Matrix" }
connect: { actors: { where: { node: { name_EQ: "Keanu" } } } } # CONNECT ON OBJECT Actor and Movie
update: { # UPDATE ON OBJECT Movie
title: "Speed" # UPDATE ON FIELD_DEFINITION Movie.title
}
) {
movies { # READ ON OBJECT Movie
title # READ ON FIELD_DEFINITION Movie.title
actors { # READ ON OBJECT Actor
name # READ ON FIELD_DEFINITION Actor.name
}
}
}
}
订阅
对于对创建事件的简单订阅,SUBSCRIBE
和 READ
操作都会触发规则
subscription {
movieCreated { # SUBSCRIBE ON OBJECT Movie
createdMovie { # READ ON OBJECT Movie
title # READ ON FIELD_DEFINITION Movie.title
}
}
}
对于对关系事件的更复杂订阅,SUBSCRIBE
是一个操作,以及对所有相关类型的 READ
subscription {
movieRelationshipCreated { # SUBSCRIBE ON OBJECT Movie
movie { # READ ON OBJECT Movie
title # READ ON FIELD_DEFINITION Movie.title
}
createdRelationship {
actors {
node { # READ ON OBJECT Actor
name # READ ON FIELD_DEFINITION Actor.name
}
}
}
}
}