Golang'da bir mobil uygulama için tasarlanmış bir sunucu oluşturuyorum. Kullanıcıların uygulamayı güncellemedikleri durumlar için API'nın birden çok sürümünü desteklemem gerekiyor. Sürümle ilgili temel endişe, verileri mobil uygulamanın sürümü için doğru biçimde döndürmektir.Golang'da api sürümlerini işlemenin idiotik yolu nedir?
Bunu yapmanın üç temel yolu olduğunu gördüm.
A. Bir yol, "/" üzerinde bir yol işleyicisine sahip olmak ve bu işlevin, url'yi sürüm oluşturma için ayrıştırmasına izin vermektir.
Örnek:
func main() {
http.HandleFunc("/", routes.ParseFullURI)
}
B. kullanımı, söz konusu yönlendirici içinde modellerini ele goril/mux gibi bir kütüphane, ama bazı warnings that this can be too slow gördüm.
Örnek:
func main() {
mux.HandleFunc("{version:}/", routes.ParseVersionForHome)
mux.HandleFunc("{version:}/getData", routes.ParseVersionForGetDAta)
mux.HandleFunc("{version:}/otherCall", routes.ParseVersionForOtherCall)
}
C. değişmez bireysel URL'ler var, ancak başlığında dayalı farklı sürümleri bölündü. Örnek:
func main() {
http.HandleFunc("/", routes.ParseHeaderForVersionForHome)
http.HandleFunc("/getData", routes.ParseHeaderForVersionForGetData)
http.HandleFunc("/otherCall", routes.ParseHeaderForVersionForOtherCall)
}
O seçenek 1 akıllıca çok dağınık kod olacak endişeliyim. Ben seçenek 2 çok yavaş performans bilge olacak endişe duyuyorum ve ben seçenek açıkça açıkça etiketli olmadığı için, seçenek 3 işlemek için istemci zor ya da kafa karıştırıcı olacağını endişe ediyorum.
Hangi yöntem Golang için en idiomatik ve en sık karşılaşılan bir mobil uygulama için en yüksek performansla sonuçlanacak?
HTTP (S) üzerinden bir API hakkında konuşuyorsanız, o zaman http://example.com/api/v1/ … 'Yaygındır. Yoksa böyle bir modeli Go sunucusunda nasıl uygulayacağınızı mı düşünüyorsunuz? –
Bir Go Server'da bunun nasıl yapılacağını soruyorum. Sorumu daha da açıklayacağım. – Avik
1 ve 2 temelde eşdeğerdir, sadece yönlendirmeyi kendiniz yapıyorsunuz. Eğer goril/mux çok yavaşsa, onu kullanmayın (varsayılan HandleFunc bile "yönlendirici" kullanıyor: 'http.ServeMux'). 3 Go ile hiçbir ilgisi yoktur, sadece istemcilerinizin üstbilgileri kullanmasını isteyip istemediğinizi (büyük bir anlaşma olmamalıdır) – JimB