操作示例
|
这是 GraphQL Library 7 版本的文档。对于长期支持 (LTS) 版本 5,请参考 GraphQL Library 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 指令中的任何规则。
查询
对于简单查询,任何被读取的类型都会评估在 operations 中包含 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
}
}
}
连接
对于连接查询,任何被读取的类型都会评估在 operations 中包含 READ 的规则。
query {
moviesConnection {
edges {
node { # READ ON OBJECT Movie
title # READ ON FIELD_DEFINITION Movie.title
actorsConnection {
edges {
node { # READ ON OBJECT Actor
name # READ ON FIELD_DEFINITION Actor.name
}
}
}
}
}
}
}
聚合
对于聚合查询,任何被聚合的类型都会评估在 operations 中包含 AGGREGATE 的规则。
query {
moviesConnection {
aggregate { # AGGREGATE ON OBJECT Movie
title { # AGGREGATE ON FIELD_DEFINITION Movie.title
longest
}
}
}
}
相同的逻辑也适用于嵌套节点的聚合。
query {
movies {
actorsConnection {
aggregate { # AGGREGATE ON OBJECT Actor
node {
name { # AGGREGATE ON FIELD_DEFINITION Actor.name
longest
}
}
}
}
}
}
变更
创建
对于 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: { set: "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
}
}
}
}
}