何千ものエントリを含む大規模なデータベースを処理するアプリケーションを想像してください。 単一の API 応答ですべてのレコードを返すと、大惨事が発生します。アプリケーションの速度が低下し、帯域幅が過剰に消費され、管理できないほどの量のデータでユーザーが圧倒されます。
ページネーション が解決策を提供します。データをより小さく管理しやすいページに分割することで、ユーザーは一度にデータのサブセットのみを受け取ります。これにより、API が高速になり、ユーザー エクスペリエンスがよりスムーズになります。
何百冊もの本が詰まった大きな図書館の棚を考えてください。 コレクション全体を無秩序に検索するよりも、セクションごと (「ページ 1」、「ページ 2」など) を参照する方がはるかに効率的です。ページネーションも同じ原理で機能します。
このデモでは、PostgreSQL データベース内の単純な items
テーブルが使用されます。 テーブルのスキーマは次のとおりです:
<code class="language-sql">CREATE TABLE items ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, created_at TIMESTAMP DEFAULT NOW() );</code>
テーブルにサンプル データを設定します:
<code class="language-sql">INSERT INTO items (name) VALUES ('Item 1'), ('Item 2'), ('Item 3'), ..., ('Item 100');</code>
2 つのクエリ パラメーターを受け入れる API エンドポイント (/items
) を作成しましょう:
page
: ページ番号 (デフォルトは 1)。limit
: ページごとのレコード数 (デフォルトは 10)。Go コードの実装は次のとおりです:
<code class="language-go">package main import ( "database/sql" "fmt" "log" "net/http" "strconv" _ "github.com/lib/pq" ) // ... (rest of the code remains the same)</code>
ページネーションパラメータ:
page
: 必要なデータのサブセットを指定します。limit
: ページごとのレコード数を定義します。オフセット計算:
offset
は、現在のページのデータを取得する前にスキップするレコードの数を決定します。
offset = (page - 1) * limit
例:
page=1
、limit=5
→ offset=0
(0 レコードをスキップ)。page=2
、limit=5
→ offset=5
(最初の 5 レコードをスキップ)。SQL クエリ:
SQL クエリの LIMIT
句と OFFSET
句は、必要なデータをフェッチします。
SELECT id, name, created_at FROM items ORDER BY id LIMIT 5 OFFSET 5;
Postman、cURL、Web ブラウザなどのツールを使用して API をテストします。
<code class="language-bash">curl "http://localhost:8080/items?page=1&limit=10"</code>
<code class="language-bash">curl "http://localhost:8080/items?page=2&limit=20"</code>
/items?page=2&limit=2
のサンプル応答:
<code class="language-sql">CREATE TABLE items ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, created_at TIMESTAMP DEFAULT NOW() );</code>
1. Go ですべてのレコードを取得してスライスしてみてはいかがでしょうか? これは、特に大規模なデータセットの場合、非常に非効率的です。数百万のレコードをメモリにロードすると、API の速度が大幅に低下したり、クラッシュしたりします。
2.欠落パラメータの処理: API エラーを防ぐために、常にデフォルト値 (page=1
、limit=10
) を定義します。
3.最適化: 頻繁にクエリされる列 (id
や created_at
など) のインデックスを作成すると、クエリ速度が大幅に向上します。
ページネーションの実装には、最小限のコードと戦略的なデータベース クエリが必要で、圧倒的な可能性がある API 応答を軽量でユーザー フレンドリーなエクスペリエンスに変換します。 大規模なアプリケーションでのスケーラビリティを強化するには、総ページ数、次/前のリンク、またはカーソルベースのページネーションなどの機能を追加することを検討してください。 Golang のリソースと最新情報については、Twitter と GitHub で Siddhesh をフォローしてください。 学び続け、構築し続けてください。 ??
以上がGo で API レスポンスをページ分割する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。