web-dev-qa-db-ja.com

複数のタイプでのGraphQLフラグメントの使用

GraphQLスキーマの複数のタイプに共通するフィールドのセットがある場合、このような方法を実行する方法はありますか?

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

フラグメントは、リクエストを行うときにクライアント側でのみ使用されます。スキーマ内では使用できません。 GraphQLは、タイプの継承や、異なるタイプの同じフィールドを書き出さなければならないという冗長性を減らす他のメカニズムをサポートしていません。

apollo-serverを使用している場合、スキーマを構成する型定義は単なる文字列なので、テンプレートリテラルを通じて探している機能を実装できます。

const nameAndAddress = `
  name: String
  address: Address
`

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

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

あるいは、型継承を使用できるようにする graphql-s2s のようなライブラリがあります。

8
Daniel Rearden

この質問の時にそれが利用できなかったかどうかはわかりませんが、私は interfaces があなたのニーズに合うはずだと思います

1
aleclofabbro