2017-10-13 17 views
1

apollo-server用のGraphQLリゾルバを、JSON APIのincludesに似た外部キーをオプションで解決するAPIの機能を利用するように構造化するにはどうすればよいのでしょうか。たとえば、パラメータを追加することで、ポストに同梱されたコメントを要求することができます。GraphQLリゾルバでJSON APIインクルードを使用するにはどうすればよいですか?

GET /articles/1?include=comments HTTP/1.1 

しかし、レコード(複数可)の要求がarticlesリゾルバのレベルで行われています。何とかその下のフィールドにアクセスできますか? commentsリゾルバが何らかの形でその親に影響を与えることはできますか?

graphql.orgにがあります。これは、著者が放棄して以来、これを解決するために設計されたpull requestを参照しています。他にどんなアプローチをとることができますか?これは基本的に現在の仕様の限界ですか?地平線上に他の変化があるのでしょうか?

答えて

1

興味深いユースケースです:)

あなたのクエリは、トップダウンのやり方で解決されているので、articlesするレゾルバはcommentsのためにリゾルバの前に呼び出される - あなたはcommentsリゾルバの内部で行う手立ては何もありませんリゾルバが何をするかに影響します。

しかし、各リゾルバには、(1)親フィールドで解決されたオブジェクト、(2)フィールドの引数、(3)コンテキスト、(4)GraphQLResolveInfoオブジェクトの4つの引数が渡されます。この最後には、サーバーに送信されたクエリに関する情報が含まれています。

たとえば、あなたがこのようなクエリを持っていたとしましょう:

query ArticlesQuery { 
    articles { 
    comments { 
     text 
    } 
    } 
} 

情報オブジェクトは、次のようなものになります。私は他のフィールドの数を省略しました

{ 
    "fieldNodes": [ 
    "name": { 
     "value": "articles" 
    }, 
    selectionSet: [ 
     "name": { 
     "value": "comments" 
     }, 
     selectionSet: [ 
     "name": { 
      "value": "text" 
     } 
     ] 
    ] 
    [ 
} 

を、しかし、クエリー文書のようにオブジェクトがどのようにネストされているかを見ることができます。これにより、どのフィールドが実際に要求されているかを確認するために反復処理を行うことができます。 API呼び出しを適切に変更することができます。

オブジェクトをより簡単に解析できるツールもあります(like this one)。

関連する問題