GitHub などのベンダーは、既存の REST API の代替として、独自の GraphQL API を提供し始めています。ただし、多くのアプリは、これらの API と直接やり取りするのではなく、代わりにこれらの API とやり取りするファースト パーティ サーバーとやり取りする必要があります。
REST API を使用すると、単一のエンドポイントからサードパーティ API 全体を簡単にプロキシできます。しかし、既存の GraphQL ライブラリはすべて事前に完全な GraphQL スキーマを知る必要があるようであり、実行時に定義されるクエリまたはタイプを指定する方法はないようです。
さらに大きな問題は、GraphQL クエリ全体が事前に解析されることです。サブクエリをサードパーティ API に渡すには、GraphQL フラグメントを保持または再構築する必要があります。
動作しない例を次に示します。
new gql.GraphQLObjectType({
fields () {
return {
thirdPartyApiCall: {
type: '???', // Type is actually defined upstream
resolve () {
// GraphQL sub-query is already parsed at this point
return thirdPartyGraphQLApi(graphQLSubQueryGoesHere)
}
}
}
}
})
答えの一部は、イントロスペクション クエリを使用してtype
、スキーマがロードされたときに、この例の を動的に生成することであると思います (もちろん、これは、頻繁に再生成されない限り、変更を上流に反映しないことを意味します) が、私は元のGraphQLサブクエリをサードパーティに渡す方法について完全に途方に暮れています。
これは現在、カスタム GraphQL パーサー/ハンドラーを記述せずに GraphQL で解決できますか?または GraphQL は現在、この種の委任をサポートしていません (つまり、サードパーティの GraphQL API を直接ラップしています)?