Как реализовать фрагменты GraphQL в схеме? - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь использовать fragments в GraphQL

Есть мой 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

1 Ответ

0 голосов
/ 29 января 2019

Фрагменты существуют только в запросах;Вы не можете использовать их на языке схемы.

В вашем примере ответ должен включать ссылку на возвращаемую 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 может быть сконфигурирован с файлом многих запросов, и вы можете сделать из него конкретный запрос по имени операции, и он сделает запрос с этой операцией и любыми фрагментами, на которые он ссылается, так что выможет повторно использовать одни и те же фрагменты в нескольких запросах.)

...