Graphql - 如何获取选定字段的类型(字符串、整数、ID 等)

Posted

技术标签:

【中文标题】Graphql - 如何获取选定字段的类型(字符串、整数、ID 等)【英文标题】:Graphql - How to get type (String, Int, ID etc..) of a selected field 【发布时间】:2021-10-27 10:55:28 【问题描述】:

我有以下 graphql 查询

const GET_USER = gql`
    query user() 
        user 
            firstName
            lastName
        
    
`

我使用graphql提供的visit函数遍历查询以找到firstNamelastName字段的类型

visit(GET_USER, 
    Field(node) 
      console.log(node)
    
  

这些字段似乎只包含以下信息。


      kind: 'Field',
      alias: undefined,
      name:  kind: 'Name', value: 'firstName' ,
      arguments: [],
      directives: [],
      selectionSet: undefined
,

      kind: 'Field',
      alias: undefined,
      name:  kind: 'Name', value: 'lastName' ,
      arguments: [],
      directives: [],
      selectionSet: undefined

这并没有告诉我firstNamelastName 的类型

我希望我可能不得不使用相关的schema file 来获取该查询的类型,但我不知道该怎么做,如果有人可以帮助我,那就太好了。

【问题讨论】:

【参考方案1】:

使用自省

不确定您使用的是什么平台,但 introspection 是您用来获取特定类型信息的平台。

自省是查询当前 API 架构中可用资源的能力。

用户类型示例:


  __type(name: "User") 
     name
     kind
  

示例响应:


  "data": 
    "__type": 
      "name": "User",
      "kind": "OBJECT"
    
  

您也可以使用自省来钻取字段:


  __type(name: "User") 
    name
    fields 
      name
      type 
        name
        kind
      
    
  

示例响应:


  "data": 
    "__type": 
      "name": "User",
      "fields": [
        
          "name": "id",
          "type": 
            "name": null,
            "kind": "NON_NULL",
            "ofType": 
              "name": "ID",
              "kind": "SCALAR"
            
          
        ,
        
          "name": "name",
          "type": 
            "name": null,
            "kind": "NON_NULL",
            "ofType": 
              "name": "String",
              "kind": "SCALAR"
            
          
        
      ]
    
  

【讨论】:

以上是关于Graphql - 如何获取选定字段的类型(字符串、整数、ID 等)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GraphQL 中获取对等字段?

仅返回选定字段 React Native / GraphQL / Amplify

GraphQL API (Astra DB) - 现有表和字段的列表

GraphQL SPQR - 如何获取客户端使用查询请求的字段列表

在构建 Java GraphQL API 时,如何避免从数据库中过度获取(即仅获取查询中指定的字段)?

如何使用字段作为来自一个 graphql 查询的过滤器来获取位于单独查询中的流体图像?