Saya membuat server di Go yang ditujukan untuk aplikasi seluler. Saya harus dapat mendukung beberapa versi API jika pengguna tidak memperbarui aplikasi. Perhatian utama dalam pembuatan versi adalah mengembalikan data dalam format yang benar untuk versi aplikasi seluler.
Saya telah melihat bahwa ada tiga cara dasar untuk melakukan hal ini.
A. Salah satu caranya adalah dengan memiliki satu pengendali rute di /, dan kemudian mengizinkan fungsi tersebut untuk mengurai url untuk pembuatan versi.
Contoh:
func main() {
http.HandleFunc("/", routes.ParseFullURI)
}
B. Gunakan perpustakaan seperti gorilla/mux untuk menangani pola di dalam router, tapi saya melihat beberapa peringatan bahwa ini mungkin terlalu lambat.
Contoh:
func main() {
mux.HandleFunc("{version:}/", routes.ParseVersionForHome)
mux.HandleFunc("{version:}/getData", routes.ParseVersionForGetDAta)
mux.HandleFunc("{version:}/otherCall", routes.ParseVersionForOtherCall)
}
C. Memiliki url individual yang tidak berubah, tetapi berdasarkan header, dibagi menjadi beberapa versi. Contoh:
func main() {
http.HandleFunc("/", routes.ParseHeaderForVersionForHome)
http.HandleFunc("/getData", routes.ParseHeaderForVersionForGetData)
http.HandleFunc("/otherCall", routes.ParseHeaderForVersionForOtherCall)
}
Saya khawatir opsi 1 akan menjadi kode yang terlalu berantakan. Saya khawatir opsi 2 akan memiliki kinerja yang terlalu lambat, dan saya khawatir opsi 3 akan sulit ditangani oleh klien, atau akan membingungkan karena versinya tidak diberi label dengan jelas.
Metode manakah yang paling idiomatis untuk Go, dan akan menghasilkan performa terbaik untuk aplikasi seluler yang akan sering disurvei?
http://example.com/api/v1/…
adalah hal yang umum. Atau apakah Anda lebih bertanya bagaimana menerapkan pola seperti itu di server Go? - person Dave C   schedule 21.04.2015http.ServeMux
). 3 tidak ada hubungannya dengan Go, hanya saja apakah Anda ingin membuat klien Anda menggunakan header atau tidak (yang seharusnya tidak menjadi masalah besar) - person JimB   schedule 21.04.2015