首頁 > 後端開發 > Golang > 如何在 Go 中對 API 回應進行分頁

如何在 Go 中對 API 回應進行分頁

Mary-Kate Olsen
發布: 2025-01-11 09:17:43
原創
701 人瀏覽過

分頁:高效資料處理實用指南

想像一個處理包含數千個條目的大型資料庫的應用程式。 在單一 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

讓我們建立一個接受兩個查詢參數的 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=5offset=0(跳過 0 筆記錄)。
  • page=2, limit=5offset=5(跳過前 5 筆記錄)。

SQL 查詢:

SQL 查詢中的 LIMITOFFSET 子句取得所需資料:

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

API 檢定

使用 Postman、cURL 或網頁瀏覽器等工具測試 API:

  • 取得第一頁(10 項):
<code class="language-bash">curl "http://localhost:8080/items?page=1&limit=10"</code>
登入後複製
  • 取得第二頁(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 速度或導致 API 崩潰。

2。處理缺失參數: 始終定義預設值(例如 page=1limit=10)以防止 API 錯誤。

3。最佳化:對經常查詢的欄位(如idcreated_at)建立索引可大幅提高查詢速度。

結論

實現分頁需要最少的程式碼和策略資料庫查詢,將潛在的壓倒性 API 回應轉變為輕量級且用戶友好的體驗。 考慮新增總頁數、下一個/上一個連結或基於遊標的分頁等功能,以增強大型應用程式中的可擴充性。 如需更多 Golang 資源和更新,請在 Twitter 和 GitHub 上關注 Siddhesh。 不斷學習,不斷建設! ??

以上是如何在 Go 中對 API 回應進行分頁的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板