2017-05-24 10 views
0

「Post」という外部APIからのデータがあるとします。 「投稿」の各投稿には「タイトル」と「コンテンツ」フィールドがあります。私はこの外部APIを制御する方法がありません、 "投稿"はそのままです。外部データとローカルデータをマージし、graphqlを使用して単一のデータとしてクエリします

私のアプリケーションでは、ローカルで、各投稿に2つ以上のフィールドを追加したいと思います。これらのフィールドは「カテゴリ」と「タグ」です。

次に、バックエンドAPIにgraphqlを使用してクエリを実行したいので、クエリで外部APIとローカルAPIの両方からデータを取得します。たとえば

{ 
    post (id: 2){ 
    title, # external 
    content, # external 
    category, # local 
    tags # local 
    } 
} 

どうすればできますか? どういうわけか外部データとローカルデータを一緒にマージしてこのデータをクエリする3番目のデータ(モデル)を作成する必要がありますか?または、私のローカルフィールドが何らかの形で外部ノードからIDを抽出し、これらのフィールドの突然変異に関する独自のデータとともに保存する必要がありますか?

答えて

0

本当に単純に、あなたがあなたのローカルデータへの呼び出しと同時に、外部APIへの呼び出しを行う関数を作成することができ、およびマージされたオブジェクトを返します。そして、

function fetchPost(postId) { 

    return Promise.all([ 
    getPostFromExternalAPI(postId), 
    getCategoryForPost(postId), 
    getTagsForPost(postId), 
    ]) 
    .then(([ post, category, tags ]) => { 
    return Object.assign(post, { 
     category, 
     tags, 
    }); 
    }); 
} 

を、あなたのポストフィールドリゾルバは、形状を有しています。

const postFieldResolver = (_, args, context) => fetchPost(args.id) 

これは、性能面の最適なオプションです。

関連する問題