34

私は独自のRestfulAPIを作成しましたが、APIから返された大量のレコードを処理するための最良の方法について考えています。

たとえば、これにGETメソッドを使用するmyapi.co.uk/messages/と、すべてのメッセージレコードのXMLが返されます。これは、場合によっては1000になる可能性があります。これにより、APIの使用が非常に遅くなります。

誰かがこれに対処するための最良の方法を提案できますか?結果をバッチで返し、リクエストでバッチサイズを指定するのが標準ですか?

4

3 に答える 3

33

APIを変更して、アプリケーションから返されるデータの範囲を制限する追加のパラメーターを含めることができます。

たとえば、パラメータを追加limitoffsetて、ほんの少しの部分をフェッチすることができます。これは、RESTに従ってページネーションを行う方法です。このようなリクエストは、21日から30日までのメッセージコレクションから10個のリソースをフェッチすることになります。このようにして、巨大なデータセットの特定の部分を要求できます。

myapi.co.uk/messages?limit=10&offset=20 

ペイロードを減らす別の方法は、リソースの表現の特定の部分のみを要求することです。Facebookのやり方は次のとおりです。

/joe.smith/friends?fields=id,name,picture

これらの方法のいずれかを使用している間は、クライアントが各リソースを検出する方法を提供する必要があることに注意してください。彼らが単にパラメータを見て、データを検索するためにそれらを変更し始めるとは限りません。それはRESTパラダイムの違反になります。それを回避するために必要なハイパーリンクを提供します。

apigeeによるRESTfulAPIデザインに関するこのプレゼンテーションをご覧になることを強くお勧めします(スクリーンキャストは「Teacha Dog toREST」と呼ばれています)。そこでは、日常の問題に取り組むための優れた実践と巧妙なアイデアが議論されています。

編集:私がこの回答を投稿して以来、ビデオは何度も更新されています。2013年1月から第3版をチェックできます。

于 2012-07-30T16:07:29.100 に答える
6

一般に、APIサイズが大きい場合を含め、APIのパフォーマンスを向上させる方法はいくつかあります。これらの各トピックは、詳細に調べることができます。

  • サイズの改ページを減らす
  • ハイパーメディアを使用した整理
  • スキーマフィルタリングでユーザーが必要とするもの
  • Preferヘッダーを使用した特定の応答の定義
  • キャッシングを使用して応答する
  • 圧縮によるより効率的でより効率的な
  • チャンクされた応答で物事を分解する
  • より多くのストリーミング応答を提供するように切り替えます
  • HTTP/2で前進

ソース:https ://apievangelist.com/2018/04/20/delivering-large-api-responses-as-efficiently-as-possible/

于 2019-11-01T13:58:35.060 に答える
1

.netコアを使用している場合は、このマジックパッケージを試す必要があります

Microsoft.AspNetCore.ResponseCompression

次にconfigureservices、スタートアップファイルでこの行を使用します

services.AddResponseCompression();

その後、configure機能します

app.UseResponseCompression();

于 2020-04-30T20:21:11.530 に答える