私はこのようなクエリを送信したいエンドでGraphQLネストされたクエリ定義
peopleList, peopleSingle, peopleEdit, peopleAdd, peopleDelete companyList, companySingle, companyEdit, companyAdd, companyDelete etc.
ようなクエリをオフに取り除くために、私のクエリにツリー状の構造を作成しようとしています:
query test {
people {
list {
id
name
}
single(id: 123) {
id
name
}
}
company {
list {
id
name
}
single(id: 456) {
id
name
}
}
}
mutation test2 {
people {
create(data: $var) {
id
name
}
}
people {
edit(id: 123, data: $var) {
id
name
}
}
}
これは、人々モジュール上の私のクエリオブジェクトの一部です:
people: {
type: //What type this should be?
name: 'Root of People queries',
fields:() => ({
list: {
type: peopleType,
description: 'Returns all people in DB.',
resolve:() => {
// resolve method implementation
}
},
single: {
type: peopleType,
description: 'Single row from people table. Requires ID argument.',
args: {
id: { type: new GraphQLNonNull(GraphQLID) }
},
resolve:() => {
// resolve method implementation
}
}
})
}
私はGraphQLObjectTypeにこのスニペットを置くことを試みているとRootQueryで(GraphQLObjectTypeを再び使用して)それらを結合します - うまくいかなかった。
代わりに、新しいタイプを作成することができます。このタイプのpeopleQueriesTypeのように、すべてのクエリをフィールドとして指定し、このオブジェクトに対して単一のクエリを作成します。しかし、これは私にとっては奇妙に思われます。私のコードを木のような形でマージするために、不要なオブジェクトでコードを汚染します。
このような種類のクエリ構造を行うことができますが、ドキュメントでヘルプを見つけることができない場合は、Apolloサーバーの実装を見てみました。
私は自分のサーバー上でnode.js + express + graphql-jsを使用しています。