如何在graphQL Yoga服务器中添加Scalar JSON类型?

时间:2019-01-19 07:37:59

标签: server graphql graphql-js

我有一个rest API,该API返回一个带有ID列表的对象,其中每个ID都有计数。

{
    "orders": {
      "PMY5XbR7FZo5qEkEb": 0
    }
}

我不知道订单对象的键要提前多少,也不知道会有多少键。

This question's response建议使用JSON类型,这是有风险但可行的。

问题是,这不适用于graphQL瑜伽服务器:

type Task {
  orders:  JSON
}

如何在瑜伽服务器中引用JSON类型?

1 个答案:

答案 0 :(得分:1)

您需要explicitly declare scalar types才能使用它们。为了使该架构起作用,您需要添加一个附加声明:

scalar JSON
type Task {
  orders:  JSON
}

GraphQL对标量值的内容一无所知,这意味着这将把额外的处理工作推给客户端(以验证和反序列化JSON),并且这实际上并未描述您的对象模型。

您可能会考虑重新安排后端响应,以具有更结构化的对象模型。作为API使用者,我会发现它更易于理解和使用

type Order {
  id: ID!
  count: Int!
}
type Task {
  orders: [Order!]!
}

但是您不能在不重新安排的情况下将后端REST API结果直接传递给此表单。