GraphQL 使用 Introspection 时某些字段没有类型名称?
Posted
技术标签:
【中文标题】GraphQL 使用 Introspection 时某些字段没有类型名称?【英文标题】:GraphQL when using Introspection some fields dont have type name? 【发布时间】:2021-10-23 08:35:48 【问题描述】:我正在学习 GraphQL,对于我的用例,我需要知道每个 ObjectType 有哪些字段类型。
但是在尝试时,其中一些没有显示类型。 这是我正在做的查询:
__type(name: "Todo")
fields
name
type
name
结果如下:
"data":
"__type":
"fields": [
"name": "priority",
"type":
"name": "Int"
,
"name": "_id",
"type":
"name": null
,
"name": "completed",
"type":
"name": "Boolean"
,
"name": "title",
"type":
"name": null
,
"name": "list",
"type":
"name": "List"
,
"name": "_ts",
"type":
"name": null
]
这是架构定义
type Todo
priority: Int
_id: ID!
completed: Boolean
title: String!
list: List
_ts: Long!
正如您在结果中看到的,_id、title 和 _ts 没有显示类型。 我应该错过了什么。
提前致谢。
【问题讨论】:
【参考方案1】:列表类型和非空类型没有名称。相反,您必须查询kind
属性和ofType
以获取更多信息:
query
__type(name: "Todo")
fields
name
type
name
kind
ofType
name
这将导致如下结果:
"data":
"__type":
"fields": [
"name": "priority",
"type":
"name": "Int",
"kind": "SCALAR",
"ofType": null
,
...
"name": "title",
"type":
"name": null,
"kind": "NON_NULL",
"ofType":
"name": "String"
,
...
]
请注意,这可以是多个级别的深度,因为您可以拥有一个不可为空类型的不可空列表。因此,您甚至可能想要深入四级:
query
__type(name: "Resource")
fields
name
type
name
kind
ofType
name
kind
ofType
name
kind
ofType
name
kind
【讨论】:
以上是关于GraphQL 使用 Introspection 时某些字段没有类型名称?的主要内容,如果未能解决你的问题,请参考以下文章
IdentityServer4 Introspection 多租户请求