2012-07-30 10 views
11

私は自分自身で安心してAPIを書いており、APIから返された大量のレコードを処理する最良の方法については疑問を抱いています。安心なAPI - 大量のデータを扱う

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

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

答えて

12

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

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

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

ペイロードを減少させるもう一つの方法は、あなたのリソースの表現の特定の部分を求めることであろう。ここではFacebookがそれをしない方法は次のとおりです。

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

は、これらのメソッドのいずれかを使用している間、あなたは、クライアントがリソースのそれぞれを発見するための方法を提供しなければならないことを覚えておいてください。パラメータを見て、データを検索してパラメータを変更するだけであると想定することはできません。それはRESTのパラダイムに違反します。それを避けるために必要なハイパーリンクを提供してください。

this presentation on RESTful API designapigeeで表示することを強くお勧めします(このスクリーンキャストは「Teach a Dog to REST」と呼ばれています)。そこでは、日々の問題に取り組むための良い実践と素敵なアイデアが議論されます。

編集:私はこの答えを掲載するので、映像が数回更新されている、あなたは、おかげで非常に役に立ちます3rd edition from January 2013

+0

をチェックアウトすることができます。 – LeeTee

+0

リンク先のプレゼンテーションがクール:厳密で有益 – kiedysktos

+0

@toniedzwiedzサーバーが20のリソースを持っていると仮定して、クライアントがリミット10とオフセット0を使用して最初の10のリソースをフェッチし、残りのリソースを取り出す要求を送信する前に、 )を使用すると、クライアントはこのアプローチで11番目から15番目のリソースをどのようにフェッチしますか?次のフェッチクライアントではオフセット10から要求するため、11番目から15番目のデータが失われるためです。クライアントが削除されたリソースを追跡することなくこれを解決する、より良いアプローチがありますか? – thavasidurai

関連する問題