2016-03-22 3 views
0

レスポンスから返されるドキュメントがたくさんある場合、その結果にページを設定し、レスポンスにリンクを渡して、APIからフェッチするドキュメントの次のセットを取得できます。しかし、私の場合は異なっています。私の応答の各文書は非常に大きくなる可能性があります。どのように私はそのような対応に対処しますか?以下の例では、サンプルJSONを検討し について:あなたがここに表示された場合大規模な単一のJsonの応答を処理するには最高の/推奨RESTfulな方法は何ですか?

{ 
    "excludes": null, 
    "endDate": 1422918663, 
    "appliedText": "Applied text", 
    "id": "135699543", 
... 
    "assignedTo": { 
    "productPart": [ 
     { 
     "part": "1" 
     }, 
     { 
     "part": "2" 
     }, 
     { 
     "part": "3" 
     }, 
     { 
     "part": "4" 
     }, 
     ... 
    ] 
    } 
... 
} 

productPartは数万人に成長することができます。このような大きな応答を制限するにはどうすれば構いませんか?

+1

このような大規模な応答に問題がありますか?パフォーマンス、メモリの問題? – dit

+0

@ditはいパフォーマンスとメモリの両方の問題が発生する可能性があります。私たちのAPIコンシューマーは、JSONの読み込みと解析に多くの時間を要するかもしれません。 UIが悪影響を受ける。 – Pramod

答えて

0

別個のリクエスト(可能であれば)で製品部品を取り出し、これを次にページ付けすることができます。

Alt。最初のx製品部品を返却し、より多くの製品部品が得られるリンクを提供してください。

+0

はい、両方のオプションについて考えました.1)製品部品のみを取り出すことができないため、最初は不可能です。2)応答の製品部品はソートされません。製品パーツのセクションでソートを有効にすると、時間がかかることがあります。 – Pramod

0

私はあなたがJSON-Streamingのようなものを試してくださいと信じています。

ストリーミング処理(増分処理とも呼ばれます)は、JSONコンテンツを処理する最も効率的な方法です。それは最低のメモリと処理のオーバーヘッドを持っており、多くの場合、ここでは、Javaプラットフォーム上で

を利用可能な多くのバイナリデータ形式のパフォーマンスを一致させることができます主なアイデアです:

try { 

    InputStream in = [..]; 
    JsonParser parser = new JsonFactory().createParser(in); 
    JsonToken token = null; 

    while ((token = parser.nextToken()) == JsonToken.FIELD_NAME) { 
     /* 
     * Parse parts and store them in client DB 
     * use later client side pagination 
     * 
     * { 
     * "part": "i" 
     * } 
     */ 
    } 

} catch (Exception e) { 
    // 
} 
関連する問題