想像一個處理包含數千個條目的大型資料庫的應用程式。 在單一 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>
讓我們建立一個接受兩個查詢參數的 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 或網頁瀏覽器等工具測試 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 速度或導致 API 崩潰。
2。處理缺失參數: 始終定義預設值(例如 page=1
、limit=10
)以防止 API 錯誤。
3。最佳化:對經常查詢的欄位(如id
或created_at
)建立索引可大幅提高查詢速度。
實現分頁需要最少的程式碼和策略資料庫查詢,將潛在的壓倒性 API 回應轉變為輕量級且用戶友好的體驗。 考慮新增總頁數、下一個/上一個連結或基於遊標的分頁等功能,以增強大型應用程式中的可擴充性。 如需更多 Golang 資源和更新,請在 Twitter 和 GitHub 上關注 Siddhesh。 不斷學習,不斷建設! ??
以上是如何在 Go 中對 API 回應進行分頁的詳細內容。更多資訊請關注PHP中文網其他相關文章!