web-dev-qa-db-fra.com

Utilisation de Fragment GraphQL sur plusieurs types

Si j'ai un ensemble de champs communs à plusieurs types dans mon schéma GraphQL, existe-t-il un moyen de faire quelque chose comme ça?

type Address {
  line1: String
  city: String
  state: String 
  Zip: String
}

fragment NameAndAddress on Person, Business {
  name: String
  address: Address
}

type Business {
   ...NameAndAddress
   hours: String
}

type Customer {
   ...NameAndAddress
   customerSince: Date
}
13
Good Idea

Les fragments ne sont utilisés que du côté client lors des requêtes - ils ne peuvent pas être utilisés dans votre schéma. GraphQL ne prend pas en charge l'héritage de type ou tout autre mécanisme qui réduirait la redondance d'avoir à écrire les mêmes champs pour différents types.

Si vous utilisez apollo-server, les définitions de types qui composent votre schéma ne sont qu'une chaîne, vous pouvez donc implémenter les fonctionnalités que vous recherchez à travers des littéraux de modèle:

const nameAndAddress = `
  name: String
  address: Address
`

const typeDefs = `
  type Business {
     ${nameAndAddress}
     hours: String
  }

  type Customer {
     ${nameAndAddress}
     customerSince: Date
  }
`

Alternativement, il existe des bibliothèques, comme graphql-s2s , qui vous permettent d'utiliser l'héritage de types.

8
Daniel Rearden

Je ne sais pas s'il n'était pas disponible à l'heure des questions, mais je suppose que interfaces devrait répondre à vos besoins

1
aleclofabbro