【问题标题】:How to implement GraphQL fragments in schema?如何在模式中实现 GraphQL 片段?
【发布时间】:2019-06-22 01:51:41
【问题描述】:

我尝试在GraphQL 中使用fragments

有我的schema

user/getUser.gql

input GetUserByUsernameInput {
  username: String!
}

fragment UserFragment on User {
  username
  information
  pictureUrl
}

type UserType {
  ...UserFragment
}

type GetUserByUsernameResponse {
  user: UserType
  errors: [Error]!
}

type Query {
  getUserByUsername(input: GetUserByUsernameInput!): GetUserByUsernameResponse!
}

shared/User.gql

type User {
  id: Int!
  username: String!
  email: String!
  information: String
  pictureUrl: String
}

我得到了虚拟错误

(node:26206) UnhandledPromiseRejectionWarning: Syntax Error: Expected Name, found ...

GraphQL request (12:9)
11: type UserType {
12:   user: ...UserFragment
            ^
13: }

我的代码应该如何使用GraphQL fragments

附言。我用graphql-code-generator

【问题讨论】:

    标签: graphql graphql-js


    【解决方案1】:

    片段只存在于查询中;您不能在架构语言中使用它们。

    在您的示例中,响应应包含对正在返回的 User 的引用:

    type GetUserByUsernameResponse {
      user: User
      errors: [Error]!
    }
    

    但是,当您进行查询时,您可以包含片段。

    query WhoAreYou($username: String!) {
      getUserByUsername(input: {username: $username}) {
        user { ...UserFragment }
        errors { message }
      }
    }
    
    fragment UserFragment on User {
      username
      information
      pictureUrl
    }
    

    如果您有理由在一个查询中多次请求同一类型对象的相同字段,或者如果您有一个能够从“库”中挑选片段的客户端库,那么片段往往会更有用GraphQL 查询,您将在多个地方使用。 (例如,Ruby graphql-client gem 可以配置一个包含许多查询的文件,您可以通过操作名称对其进行特定查询,它将使用该操作及其引用的任何片段进行查询,因此您可以在多个查询中重复使用相同的片段。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      相关资源
      最近更新 更多