Rumah >pembangunan bahagian belakang >Golang >Membawa Penomboran ke Tahap Seterusnya: Isih dan Penapisan dalam API Go
Dalam siaran terakhir, kami telah menangani Penomboran memecahkan respons API yang besar kepada bahagian yang boleh diurus. Tetapi jika anda pernah mahu membenarkan pengguna mengawal cara data diisih atau menapis hasil khusus, maka anda sudah bersedia untuk langkah seterusnya: isih dan menapis.
Mari kita selami dan jadikan API kita lebih berkuasa dengan menambahkan ciri ini.
Jika anda belum melalui tutorial sebelumnya, inilah pautannya.
Penomboran sahaja tidak selalu mencukupi. Bayangkan pengguna mencari item terbaharu atau hanya yang dibuat dalam jangka masa tertentu. Isih dan penapisan membenarkan pengguna:
- Isih: Pilih susunan hasil (cth. terbaharu hingga yang paling lama)
- Penapis: Kecilkan hasil kepada perkara yang mereka perlukan (cth. item yang dibuat hari ini)
Dengan menggabungkan penomboran dengan pengisihan dan penapisan, kami mencipta API yang lebih mesra pengguna.
Kami akan membina jadual item dari blog sebelumnya. Untuk imbas kembali, berikut ialah skemanya:
CREATE TABLE items ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, created_at TIMESTAMP DEFAULT NOW() );
Isih adalah tentang memesan hasil. Kami akan membenarkan pengguna mengisih mengikut nama atau lajur create_at dalam tertib menaik atau menurun.
Pengguna akan lulus dua parameter pertanyaan:
Contoh URL:
/items?page=1&limit=10&sort=created_at&order=desc
Kami akan mengubah suai pertanyaan SQL secara dinamik untuk memasukkan pengisihan:
// 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 }
Penapisan membolehkan pengguna memperhalusi carian mereka. Contohnya, kita boleh menapis item mengikut julat tarikh atau item yang mengandungi kata kunci tertentu dalam namanya.
Kami akan menyokong dua penapis:
Contoh URL :
/items?page=1&limit=10&name=Item&created_after=2025-01-10 20:38:57.832777
Kami akan menambah WHERE syarat untuk mengendalikan penapis ini:
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
Tidak mengesahkan input pengguna: Membenarkan lajur sewenang-wenangnya atau susunan isihan yang tidak sah boleh mendedahkan pangkalan data anda kepada suntikan SQL. Sentiasa sahkan input.
Anda boleh mendapatkan repositori kod lengkap untuk tutorial ini di sini
Dengan penomboran, pengisihan dan penapisan, API anda kini lebih mesra pengguna dan fleksibel. Untuk kefungsian yang lebih maju, pertimbangkan untuk menambah:
Nantikan siaran seterusnya di mana kami akan meneroka teknik lanjutan ini!
Untuk mendapatkan maklumat lanjut tentang konsep, projek, dsb. Golang dan untuk terus dikemas kini tentang Tutorial, ikuti Siddhesh di Twitter dan GitHub.
Sehingga itu Teruskan Belajar, Teruskan Membina ??
Atas ialah kandungan terperinci Membawa Penomboran ke Tahap Seterusnya: Isih dan Penapisan dalam API Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!