GitHubのようなベンダーは、既存のREST APIの代替として独自のGraphQL APIを提供し始めています。しかし、多くのアプリはこれらのAPIと直接対話して、代わりに自社のサーバーと対話してこれらのAPIを話すべきではありません。複数のサードパーティのGraphQL APIを1つのGraphQLエンドポイントにラップする
REST APIでは、1つのエンドポイントからサードパーティ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 APIを直接ラッピングする)か? GraphQLコミュニティスラックから