GraphQL查询:如何返回缺失字段为None并明确odds类型?
问题:GraphQL查询中区分不同类型的赔率并返回缺失值
我的GraphQL查询如下:
query Odds($id: ID!) { odds(id: $id) { oddsMarkets { oddsOptions { ... on OddsToWin { odds } ... on OddsFinishes { odds } ... on OddsCutsPlayers { odds } ... on OddsLeadersPlayers { odds } } } } }
当前返回的结果示例:
{ "odds": { "oddsMarkets": [ { "oddsOptions": [ { "odds": "+1200" } ] } ] } }
现在的问题是:无法判断返回的odds对应哪种类型(获胜、完赛、晋级还是领先),而且缺失的类型不会返回对应字段。想知道怎么能明确赔率的类型归属,或者让所有期望的字段都返回(缺失值用null/None填充)。
解决方案
方法1:通过__typename明确类型归属
GraphQL自带__typename元字段,能直接返回当前对象的具体类型。修改查询,在每个内联片段中加入这个字段,就能直观区分每个赔率对应的类型:
query Odds($id: ID!) { odds(id: $id) { oddsMarkets { oddsOptions { ... on OddsToWin { __typename odds } ... on OddsFinishes { __typename odds } ... on OddsCutsPlayers { __typename odds } ... on OddsLeadersPlayers { __typename odds } } } } }
返回结果会变成这样:
{ "odds": { "oddsMarkets": [ { "oddsOptions": [ { "__typename": "OddsToWin", "odds": "+1200" } ] } ] } }
通过__typename字段就能直接判断当前赔率的类型,无需提前调研。
方法2:用别名区分不同类型的赔率,强制返回所有字段
如果希望不管类型是否存在,都返回所有期望的字段(缺失值为null),可以给每个类型的odds字段设置不同的别名,确保每个类型对应的键都会出现在结果中:
query Odds($id: ID!) { odds(id: $id) { oddsMarkets { oddsOptions { ... on OddsToWin { winOdds: odds } ... on OddsFinishes { finishOdds: odds } ... on OddsCutsPlayers { cutOdds: odds } ... on OddsLeadersPlayers { leaderOdds: odds } } } } }
返回结果会包含所有别名对应的键,不存在的类型对应的字段会返回null:
{ "odds": { "oddsMarkets": [ { "oddsOptions": [ { "winOdds": "+1200", "finishOdds": null, "cutOdds": null, "leaderOdds": null } ] } ] } }
这样就能一目了然看到所有类型的赔率状态,缺失的类型会明确显示为null。
内容的提问来源于stack exchange,提问作者HJA24
相关产品推荐
相关产品推荐

