[解決済み】API paginationのベストプラクティス
質問
私が構築しているページ分割APIで、奇妙なエッジケースを処理するのを手伝ってほしいのですが。
多くのAPIがそうであるように、このAPIも大きな結果をページ分割します。もし、/foosに問い合わせると、100件の結果(つまり、foo #1-100)と、foo #101-200を返すはずの/foos?page=2へのリンクが表示されるでしょう。
残念ながら、APIコンシューマが次のクエリを実行する前にfoo #10がデータセットから削除されると、/foos?page=2は100ずつ相殺されてfoos #102-201を返すことになる。
これは、すべてのfooを引き出そうとしているAPIコンシューマにとって問題である。彼らはfoo #101を受け取ることができないのだ。
これを処理するためのベストプラクティスは何でしょうか?できるだけ軽量にしたいのですが(APIリクエストのセッションを処理しないなど)。他のAPIからの例は非常にありがたいです
どのように解決するのですか?
あなたのデータがどのように処理されているのか完全に把握しているわけではないので、これがうまくいくかどうかはわかりませんが、タイムスタンプフィールドでページ分割することを検討したことはありますか?
foosに問い合わせると、100件の結果が得られます。 APIはこのようなものを返すはずです(JSONを想定していますが、XMLが必要な場合は同じ原則に従うことができます)。
{
"data" : [
{ data item 1 with all relevant fields },
{ data item 2 },
...
{ data item 100 }
],
"paging": {
"previous": "http://api.example.com/foo?since=TIMESTAMP1"
"next": "http://api.example.com/foo?since=TIMESTAMP2"
}
}
注意点として、タイムスタンプを1つだけ使用することは、結果の暗黙の「制限」に依存しています。明示的な制限を加えるか、あるいは
until
プロパティを使用します。
タイムスタンプは、リスト内の最後のデータ項目を使用して動的に決定することができます。 これは、Facebookの グラフAPI (下にスクロールすると、上にあげた形式のページネーションリンクが表示されます)。
一つ問題があるとすれば、データ項目を追加した場合ですが、あなたの説明からすると、最後に追加されるようです(もしそうでなければ、教えてください、改善できるかどうか検討します)。
関連
-
[解決済み] Powershellです。アウトファイル - パスへのアクセスは拒否されました
-
[解決済み] RESTfulとRESTlessの違いについて
-
[解決済み] RESTのネストされたリソースのベストプラクティスは何ですか?
-
[解決済み] REST Web アプリケーションのページネーション
-
[解決済み】REST APIでのPUTメソッドとPATCHメソッドの使い分け 実生活でのシナリオ
-
[解決済み】URIの単語の区切り文字にハイフン、アンダースコア、キャメルケースのどれを使うか?
-
[解決済み】有効なリクエストでありながら、データが空の場合の適切なRESTレスポンスコードは何ですか?
-
[解決済み】動詞のないREST URLを作成する方法は?
-
[解決済み] restfulなPOSTレスポンスのための「ベスト」プラクティス
-
[解決済み】REST API - ファイル(画像)処理 - ベストプラクティス
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] UML / API : RESTful APIをモデル化する方法
-
[解決済み] postmanでAPIからエクセルファイル(.xls)をダウンロードする方法は?
-
[解決済み] Powershellです。アウトファイル - パスへのアクセスは拒否されました
-
[解決済み] Apache Marathon REST APIを使用してDockerインスタンスをスケールアップする方法。
-
[解決済み] RESTfulとRESTlessの違いについて
-
[解決済み] RESTとAPIの違いは何ですか?
-
[解決済み] jenkins restful apiのリファレンスはどこにありますか?[クローズド]
-
[解決済み】API paginationのベストプラクティス
-
[解決済み】動詞のないREST URLを作成する方法は?
-
[解決済み】REST認証スキームの安全性