GraphQL后备查询,如果没有结果

时间:2018-08-14 11:10:40

标签: graphql

我有以下查询:

{
     entity(id: "theId") {
         source1: media(source: 1){
             images{
                 src, alt
             }
         }
         source2: media(source: 2){
             images{
                 src, alt
             }
         }
     }
}

那给我的结果是:

{
    "entity": [
      {
        "source1": {
            "images": [{"src": "", "alt": ""}]
        },
        "source2": {
            "images": [{"src": "", "alt": ""}]
        }
      }
    ]
}

是否有一种方法可以产生source1source2的单个结果,执行source1,如果没有结果,则使用source2作为后备?

1 个答案:

答案 0 :(得分:0)

您要查询两个字段(source1,source2),因此必须为它们两个都返回某些内容(null是一个可能的选项)。如果要按顺序检查它们,则可能应该将查询分为两部分,然后在客户端一次运行它们。

您是否可以更改,以便仅查询单个source字段,并让解析器(在服务器上)根据可用资源返回有意义的内容,可以这么说?像这样:

{
     entity(id: "theId") {
         source: media(sourcesList: [1, 2]){
             images{
                 src, alt
             }
         }
     }
}

其中sourceList是要尝试使用的源。因此,解析程序(服务器)可以检查源1是否可用,如果没有返回源2。

您还可以添加一个字段,使客户知道从提议的列表中实际返回了哪个源(如果返回了源1,则下面的sourceNumberReturned将返回1,否则返回2

{
     entity(id: "theId") {
         source: media(sourcesList: [1, 2]){
             images{
                 src, alt
             }
             sourceNumberReturned
         }
     }
}