2016-09-27 15 views
1

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コミュニティスラックから

答えて

0

ユーザー@jbintoは親切graphql-js実装上のこの現在未解決のGitHubの問題で私を指摘:https://github.com/graphql/graphql-js/issues/490

現在、答えは「それは行うことができない」ことがなく、メンテナがに見ているようですGitHubが最初の主要な公開GraphQL APIを作成しました。

GitHubでの問題の進展に続いて、どのような解決策が議論から生まれるのかを見る価値があります。ドライバは将来このシナリオをサポートするか、それを解決するユーザーランドソリューションが出てくるかもしれません。現時点での詳細については、多くの未解決の問題があります。

関連する問題