给定一组 GraphQL 变量类型,是不是可以使用客户端模式为集合中的每种类型创建所有有效值的映射

Posted

技术标签:

【中文标题】给定一组 GraphQL 变量类型,是不是可以使用客户端模式为集合中的每种类型创建所有有效值的映射【英文标题】:Given a set of GraphQL variable types, is it possible to use the client schema to create a map of all valid values for each type in the set给定一组 GraphQL 变量类型,是否可以使用客户端模式为集合中的每种类型创建所有有效值的映射 【发布时间】:2017-06-09 23:54:38 【问题描述】:

标题主要说明了一切:我正在构建一个反应/中继应用程序,它允许用户在运行时动态创建图表,显示他们在指定时间范围内的各种收入流。该图表的一个特点是用户能够指定每个收入流的采样间隔(例如YEARQUARTERMONTHWEEK 等)作为每个流的参数。

这些值在架构中定义为GraphQLInputObjectType 实例,如下所示:

enum timeSeriesIntervalEnum 
  YEAR
  QUARTER
  MONTH
  WEEK

在客户端,我定义了以下形式的 react-relay 片段:

fragment on BalanceSheet 
  income 
    # some income stream
    afterTax   
      values(interval: $samplingInterval)
      dates(interval: $samplingInterval)
    
  

此变量值将作为下拉菜单的一部分填充到单独的组件中,其中下拉菜单中的每个值都应对应于有效的timeSeriesIntervalEnum 值。

虽然可以简单地硬编码这些值,但底层 API 仍然经常更改,我想减少耦合,而是通过为给定下拉列表指定变量类型来动态填充这些字段(例如 timeSeriesIntervalEnum),然后使用 graphql 客户端模式解析值并填充配置 json 文件(运行前)或在运行时动态分配值。

注意:我已经做了一些查询字符串和片段转译预启动,所以如果需要,我不反对创建 json 配置文件作为此过程的一部分。 p>

【问题讨论】:

【参考方案1】:

这可以使用introspection query 来完成。

在您的情况下,这是一种可能的解决方案:


    __type(name: "timeSeriesIntervalEnum") 
    name
    enumValues 
      name
    
  

响应包含所有可能类型的列表:


  "data": 
    "__type": 
      "name": "timeSeriesIntervalEnum",
      "enumValues": [
        
          "name": "YEAR"
        ,
        
          "name": "QUARTER"
        ,
        
          "name": "MONTH"
        ,
        
          "name": "WEEK"
        
      ]
    
  

【讨论】:

客户端如何确定地知道枚举的名称?

以上是关于给定一组 GraphQL 变量类型,是不是可以使用客户端模式为集合中的每种类型创建所有有效值的映射的主要内容,如果未能解决你的问题,请参考以下文章

如何计算 R 中给定一组概率的生存结果的 brier 分数?

绑定一组数据集的行?

在 GraphQL Mutate 函数中将 ID 作为正确的变量类型传递

给定一组条件,通过算法确定只有一个条件为真

在给定一组地理坐标的情况下获取友好的位置名称?

给定一组点或向量,找到彼此最接近的 N 个点的集合