前回の投稿では、大きな API 応答を管理可能なチャンクに分割する ページネーション に取り組みました。しかし、データの並べ替え方法や特定の結果のフィルターをユーザーが制御できるようにしたい場合は、次のステップである 並べ替え に進む準備ができています。 フィルタリング.
これらの機能を追加して、API をさらに強力にしてみましょう。
前のチュートリアルをまだ行っていない場合は、こちらのリンクを参照してください。
ページネーションだけでは必ずしも十分とは限りません。ユーザーが最新のアイテム、または特定の期間に作成されたアイテムのみを検索していると想像してください。並べ替えとフィルタリングにより、ユーザーは次のことが可能になります:
- 並べ替え: 結果の順序を選択します (例: 新しいものから古いもの)
- フィルター: 結果を必要なものに絞り込みます (例: 今日作成されたアイテム)
ページネーションと並べ替えおよびフィルタリングを組み合わせることで、よりユーザーフレンドリーな API を作成します。
前回のブログのアイテム テーブルを基に構築していきます。要約すると、スキームは次のとおりです:
CREATE TABLE items ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, created_at TIMESTAMP DEFAULT NOW() );
並べ替えとは、結果を順序付けることです。ユーザーが名前または created_at 列で昇順または降順に並べ替えられるようにします。
ユーザーは 2 つのクエリ パラメータを渡します:
URL の例:
/items?page=1&limit=10&sort=created_at&order=desc
並べ替えを含めるように SQL クエリを動的に変更します。
// Extract sort and order query parameters sort := r.URL.Query().Get("sort") order := r.URL.Query().Get("order") // Validate the sort column validSortColumns := map[string]bool{"name": true, "created_at": true} if !validSortColumns[sort] { sort = "created_at" // Default sort column } // Validate the sort order if order != "asc" && order != "desc" { order = "asc" // Default sort order } // Modify the SQL query query := fmt.Sprintf("SELECT id, name, created_at FROM items ORDER BY %s %s LIMIT OFFSET ", sort, order) rows, err := db.Query(query, limit, offset) if err != nil { http.Error(w, "Failed to fetch items", http.StatusInternalServerError) return }
フィルタリングにより、ユーザーは検索を絞り込むことができます。たとえば、日付範囲や名前に特定のキーワードを含むアイテムでアイテムをフィルタリングできます。
次の 2 つのフィルターをサポートします:
URL の例:
/items?page=1&limit=10&name=Item&created_after=2025-01-10 20:38:57.832777
これらのフィルターを処理するために WHERE 条件を追加します。
CREATE TABLE items ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, created_at TIMESTAMP DEFAULT NOW() );
/items?page=1&limit=10&sort=created_at&order=desc
// Extract sort and order query parameters sort := r.URL.Query().Get("sort") order := r.URL.Query().Get("order") // Validate the sort column validSortColumns := map[string]bool{"name": true, "created_at": true} if !validSortColumns[sort] { sort = "created_at" // Default sort column } // Validate the sort order if order != "asc" && order != "desc" { order = "asc" // Default sort order } // Modify the SQL query query := fmt.Sprintf("SELECT id, name, created_at FROM items ORDER BY %s %s LIMIT OFFSET ", sort, order) rows, err := db.Query(query, limit, offset) if err != nil { http.Error(w, "Failed to fetch items", http.StatusInternalServerError) return }
/items?page=1&limit=10&name=Item&created_after=2025-01-10 20:38:57.832777
ユーザー入力を検証していません: 任意の列や無効な並べ替え順序を許可すると、データベースが SQL インジェクションの危険にさらされる可能性があります。入力は常に検証してください。
このチュートリアルの完全なコード リポジトリはここにあります
ページネーション、並べ替え、フィルタリングが導入されたことで、API はよりユーザーフレンドリーで柔軟になりました。さらに高度な機能については、以下の追加を検討してください。
これらの高度なテクニックを探求する次の投稿をお楽しみに!
Golang の概念やプロジェクトなどに関する詳細情報を入手したり、チュートリアルの最新情報を入手したりするには、Twitter と GitHub で Siddhesh をフォローしてください。
それまで学び続けてください、構築し続けてください ??
以上がページネーションを次のレベルへ: Go API での並べ替えとフィルター処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。