如何在模式中实现 GraphQL 片段?
How to implement GraphQL fragments in schema?
我尝试在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
?
PS。我用 graphql-code-generator
片段只存在于查询中;你不能在模式语言中使用它们。
在您的示例中,响应应包含对返回的 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
}
如果您有理由在一个查询中多次请求同一类型对象的相同字段,或者如果您有一个能够从 "library" 的 GraphQL 查询,您将在多个地方使用。 (例如,Ruby graphql-client gem 可以配置一个包含许多查询的文件,您可以通过操作名称从中进行特定的查询,它将使用该操作进行查询及其引用的任何片段,因此您可以在多个查询中重复使用相同的片段。)
我尝试在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
?
PS。我用 graphql-code-generator
片段只存在于查询中;你不能在模式语言中使用它们。
在您的示例中,响应应包含对返回的 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
}
如果您有理由在一个查询中多次请求同一类型对象的相同字段,或者如果您有一个能够从 "library" 的 GraphQL 查询,您将在多个地方使用。 (例如,Ruby graphql-client gem 可以配置一个包含许多查询的文件,您可以通过操作名称从中进行特定的查询,它将使用该操作进行查询及其引用的任何片段,因此您可以在多个查询中重复使用相同的片段。)