0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

protobuf.devのAPI Best Practicesを読んでいく全部俺Advent Calendar 2024

Day 7

API Best Practices ~ページングトークンなしでページネーションAPIを定義することは稀である

Last updated at Posted at 2024-12-06

ページングトークンなしでページネーションAPIを定義することは稀である

ページネーションするAPIのベストプラクティスは、ページングトークン(next_page_tokenと呼ばれる)を使用することです。

このページングトークンもprotoで定義し、任意の方法でシリアライズしたものを使用します。

この定義には多くのフィールドを含めることができますが、重要なのは柔軟性と安定性を確保できることです。
このトークンのフィールドは信頼できない入力として検証することを忘れないでください。

message FooQuery {
  // 悪い例: 最初と2回目のクエリの間にデータが変更された場合、結果を見逃してしまう可能性がある。 
  // 最終的に一貫性のあるストレージでは、古いデータが新しいデータの後に表示されることは珍しくない。 
  // また、オフセット/ページのアプローチはすべてソート順を前提にしているため、柔軟性が失われます。
  optional int64 max_timestamp_ms;
  optional int32 result_offset;
  optional int32 page_number;
  optional int32 page_size;

  // 良い例: You've got flexibility!
  // これを Response で返し、クライアントが次のクエリに設定します。
  optional string next_page_token;
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?