ホームページ > バックエンド開発 > Golang > Go で API レスポンスをページ分割する方法

Go で API レスポンスをページ分割する方法

Mary-Kate Olsen
リリース: 2025-01-11 09:17:43
オリジナル
678 人が閲覧しました

ページネーション: 効率的なデータ処理のための実践ガイド

何千ものエントリを含む大規模なデータベースを処理するアプリケーションを想像してください。 単一の API 応答ですべてのレコードを返すと、大惨事が発生します。アプリケーションの速度が低下し、帯域幅が過剰に消費され、管理できないほどの量のデータでユーザーが圧倒されます。

ページネーション が解決策を提供します。データをより小さく管理しやすいページに分割することで、ユーザーは一度にデータのサブセットのみを受け取ります。これにより、API が高速になり、ユーザー エクスペリエンスがよりスムーズになります。

How to Paginate API Responses in Go何百冊もの本が詰まった大きな図書館の棚を考えてください。 コレクション全体を無秩序に検索するよりも、セクションごと (「ページ 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>
ログイン後にコピー

ページネーションを使用した Go API の構築

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=1limit=5offset=0 (0 レコードをスキップ)。
  • page=2limit=5offset=5 (最初の 5 レコードをスキップ)。

SQL クエリ:

SQL クエリの LIMIT 句と OFFSET 句は、必要なデータをフェッチします。

SELECT id, name, created_at FROM items ORDER BY id LIMIT 5 OFFSET 5;

API テスト

Postman、cURL、Web ブラウザなどのツールを使用して API をテストします。

  • 最初のページ (10 項目) を取得します:
<code class="language-bash">curl "http://localhost:8080/items?page=1&limit=10"</code>
ログイン後にコピー
  • 2 ページ目 (20 項目) を取得します:
<code class="language-bash">curl "http://localhost:8080/items?page=2&limit=20"</code>
ログイン後にコピー

API 応答の例

/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=1limit=10) を定義します。

3.最適化: 頻繁にクエリされる列 (idcreated_at など) のインデックスを作成すると、クエリ速度が大幅に向上します。

結論

ページネーションの実装には、最小限のコードと戦略的なデータベース クエリが必要で、圧倒的な可能性がある API 応答を軽量でユーザー フレンドリーなエクスペリエンスに変換します。 大規模なアプリケーションでのスケーラビリティを強化するには、総ページ数、次/前のリンク、またはカーソルベースのページネーションなどの機能を追加することを検討してください。 Golang のリソースと最新情報については、Twitter と GitHub で Siddhesh をフォローしてください。 学び続け、構築し続けてください。 ??

以上がGo で API レスポンスをページ分割する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート