操作

这是 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)
}

这同样适用于指令没有参数的情况,因为 operations 默认值为所有操作。

以下示例适用于 @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
            }
        }
    }
}

订阅

对于对创建事件的简单订阅,SUBSCRIBEREAD 操作都会触发规则

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
                }
            }
        }
    }
}