我想了解这些不同的 GraphQL 指令。我试图在网上查找,但没有得到所有这些指令的工作原理的解释。请解释这些不同类型的指令。
enum __DirectiveLocation {
QUERY,
MUTATION,
SUBSCRIPTION,
FIELD,
FRAGMENT_DEFINITION,
FRAGMENT_SPREAD,
INLINE_FRAGMENT,
SCHEMA,
SCALAR,
OBJECT,
FIELD_DEFINITION,
ARGUMENT_DEFINITION,
INTERFACE,
UNION,
ENUM,
ENUM_VALUE,
INPUT_OBJECT,
INPUT_FIELD_DEFINITION
}
Run Code Online (Sandbox Code Playgroud)
GraphQL 指令可以在任何 GraphQL文档中使用——包括操作(如查询和突变)以及用于定义特定模式的类型定义。指令必须指定一个或多个位置。这些位置分为两组。
AnExecutableDirectiveLocation代表可执行文档(即包含可以执行的操作的文档)。这包括:
QUERY
MUTATION
SUBSCRIPTION
FIELD
FRAGMENT_DEFINITION
FRAGMENT_SPREAD
INLINE_FRAGMENT
Run Code Online (Sandbox Code Playgroud)
类型系统定义(即用于创建模式的类型定义)内的位置称为 aTypeSystemDirectiveLocation并包括:
SCHEMA
SCALAR
OBJECT
FIELD_DEFINITION
ARGUMENT_DEFINITION
INTERFACE
UNION
ENUM
ENUM_VALUE
INPUT_OBJECT
INPUT_FIELD_DEFINITION
Run Code Online (Sandbox Code Playgroud)
GraphQL 文档可以表示为由 AST 节点组成的抽象语法树 (AST) 对象。上面的每个位置都与同名的ASTNode匹配。
使用一个或多个 TypeSystemDirectiveLocation 的指令称为模式指令。像Apollo Server这样的库允许我们定义模式指令的逻辑,该逻辑可用于转换指令所附加的模式元素。例如,使用 Apollo Server,我们扩展了该类SchemaDirectiveVisitor,该类为每个可能的位置都有一个方法——在生成模式时调用该方法以确定如何更改模式中的目标元素。
使用 ExecutableDirectiveLocations 的指令称为客户端指令。尽管这些是规范的一部分,但只存在两个标准客户端指令 -@skip和@include。可以定义额外的自定义客户端指令,但目前还没有一种在服务器上实现它们的好方法(至少在 Node.js 生态系统中是这样)。
以下是每个指令位置的用法示例:
schema @SCHEMA {
query: Query
}
scalar DateTime @SCALAR
type SomeType @OBJECT {
someField(someArg: Int! @ARGUMENT_DEFINITION): String @FIELD_DEFINITION
}
interface SomeInterface @INTERFACE {
someField: String
}
union SomeUnion @UNION = SomeType | SomeOtherType
enum SomeEnum @ENUM {
someEnumValue @ENUM_VALUE
}
input SomeInputType @INPUT_OBJECT {
someInputField: String @INPUT_FIELD_DEFINITION
}
Run Code Online (Sandbox Code Playgroud)
对于可执行文件:
query MyQuery @QUERY {
someField @FIELD
someOtherField {
...MyFragment @FRAGMENT_SPREAD
... on SomeType @INLINE_FRAGMENT {
aDifferentField
}
}
}
fragment MyFragment @FRAGMENT_DEFINITION {
yetAnotherField
}
mutation MyMutation @MUTATION {
doSomething
}
subscription MySubscription @SUBSCRIPTION {
somethingHappened
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2488 次 |
| 最近记录: |