【问题标题】:Defining Schema with graphql-tools使用 graphql-tools 定义模式
【发布时间】:2017-07-17 06:26:05
【问题描述】:

我正在尝试为我的 API 定义我的架构。我遇到了一个问题,每个资源都有许多不同的部分。理想情况下,我只想说sections是一个JSON对象,而不是定义sections中的所有不同模块。有没有办法我可以做到这一点?据我所知,似乎没有使用 graphql-toolsJSON 类型定义

// Define your types here.
const typeDefs = `

  type Resource {
    id: ID,
      title: String!,
        slug: String!,
      path: String!,
      template: String!,
      published: String!,
      sections: Sections
    }

    type Sections {
      // ...
    }

    type Query {
      allLinks(filter: LinkFilter): [Link!]!
      findResource(filter: ResourceFilter): [Resource!]!
    }

`;

【问题讨论】:

  • JSON 标量可以在这里使用,但需要注意的是:如果您开始使用 JSON 标量,您将失去 GraphQL 的很多好处。例如,您不会获得该对象的自动类型检查(如果您已设置)。

标签: node.js graphql


【解决方案1】:

您需要导入自定义 JSON 标量。 This module 是最受欢迎的之一。

在你的 typeDefs 的任何地方,添加以下行:

scalar JSON

然后在resolvers 对象中传递给makeExecutableSchema

const GraphqlJSON = require('graphql-type-json')

const resolvers = {
  Query: //queries
  Mutation: //mutations
  // All your other types
  JSON: GraphqlJSON
}

一句警告:任何时候您将 JSON 用作标量,都会失去灵活性。 GraphQL 的部分魅力在于它允许客户端只查询他们需要的字段。当您使用 JSON 时,您的客户端将只能查询整个 JSON 块,或者根本不查询 - 他们将无法选择其中的一部分。

【讨论】:

  • 这正是我想要的,谢谢。我不太担心失去sections 响应的灵活性,因为我永远不需要选择单个部分。它们总是一起使用。
猜你喜欢
  • 2018-05-29
  • 2021-01-02
  • 2021-04-10
  • 2021-09-24
  • 2017-08-08
  • 2018-10-01
  • 2019-08-26
  • 2021-12-23
  • 2019-03-22
相关资源
最近更新 更多