https://facebook.github.io/graphql/draft/#sec-Schema-Introspection
type __Schema { types: [__Type!]! queryType: __Type! mutationType: __Type subscriptionType: __Type directives: [__Directive!]! } type __Type { kind: __TypeKind! name: String description: String ...
从https://developer.github.com/v4/guides/intro-to-graphql/#discovering-the-graphql-api(curl -H "Authorization: bearer token" https://api.github.com/graphql
)下载的信息
(文件的开头
{ "data": { "__schema": { "queryType": { "name": "Query" }, "mutationType": { "name": "Mutation" }, "subscriptionType": null, "types": [ { "kind": "SCALAR", "name": "Boolean", ...
我对此进行了解释,因为GitHub模式结果无效,因为queryType
未指定kind
(nonNullable
这个结果是否违反了架构规则?或者我缺少什么?
答案 0 :(得分:1)
此响应通过验证,因为缺少的字段与返回null的字段不同。只有首先没有要求时,响应中才会缺少该字段。
如果您访问GitHub的GraphQL Explorer,则可以自己生成一个自省查询,请求kind
字段作为queryType
字段选择集的一部分,它将返回该字段带有非空值。
{
__schema {
queryType {
kind
}
}
}
响应:
{
"data": {
"__schema": {
"queryType": {
"kind": "OBJECT"
}
}
}
}
通过向某个端点发出GET
请求来获取模式很方便,但这不是反思模式的标准方法。相反,您应该使用需要针对端点本身的任何选择集的请求。这个问题使以这种不太传统的方式进行操作的缺点变得显而易见。在这种情况下,GitHub自发进行的自省查询都会丢失一个或多个原本可能需要的字段。因为您不是进行内省查询的人,所以您不知道期望响应的形式如何。