2

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 を直接ラップしています)?

4

1 に答える 1

2

@jbintoGraphQL コミュニティ Slack のユーザーは、graphql-js実装に関する現在未解決の GitHub の問題を教えてくれました: https://github.com/graphql/graphql-js/issues/490

現在、答えは「それはできません」のようですが、GitHub が最初の主要なパブリック GraphQL API を作成したため、メンテナーはそれを調査しています。

GitHub での問題の進展を追跡し、議論からどのような解決策が生じるかを確認することは価値があります。ドライバーは将来このシナリオをサポートするか、それを解決するユーザーランド ソリューションが登場する可能性があります。現時点では、詳細について多くの未解決の質問があります。

于 2016-09-27T15:42:22.587 に答える