【问题标题】:Flatten Apollo GraphQL Response (Data Field)展平 Apollo GraphQL 响应(数据字段)
【发布时间】:2019-03-10 20:06:51
【问题描述】:

客户端需要我想通过 GraphQL 响应提供的特定 JSON 结构。

不幸的是,我必须摆脱顶级“数据”字段并为该客户端扁平化响应。

有没有办法通过解析器来做到这一点?

发件人:

{ 
   "data" : {
      "myKey": 
         {...}
   }
}

收件人:

{ 
   "myKey": 
      {...}
}

谢谢!

【问题讨论】:

    标签: graphql graphql-js apollo-client apollo-server


    【解决方案1】:

    技术上可以通过使用传递给ApolloServer 的构造函数的formatResponse 选项来实现:

    const formatResponse = ({ data, errors }) => data
    const server = new ApolloServer({ typeDefs, resolvers, formatResponse })
    

    或为特定查询(例如,status)执行此操作,您可以这样做:

        const formatResponse = res => {
          if (res.data && res.data.status) return res.data
          return res
        }
    

    但是,出于两个主要原因,我强烈建议不要使用这种方法。第一,它违反了规范,这将使您的 API 与大多数为显式使用 GraphQL API 而设计的客户端库不兼容。第二,它让您要么不得不将错误(验证或其他方式)注入到实际数据中的某个地方,要么将它们完全排除在外。

    很难想象客户端应用程序不应该从响应中提取数据的情况——如果您在特定框架上遇到困难,这听起来不错提出问题!

    【讨论】:

    • 嘿,谢谢!我同意,我只会将它用于特定的查询……如果可能的话?
    猜你喜欢
    • 2019-04-21
    • 2020-01-18
    • 2018-02-14
    • 2019-12-06
    • 2020-08-24
    • 2020-05-05
    • 1970-01-01
    • 2019-07-26
    • 2021-06-24
    相关资源
    最近更新 更多