Я создаю сервер в Go, предназначенный для мобильного приложения. Мне нужно иметь возможность поддерживать несколько версий API для случаев, когда пользователи не обновляют приложение. Основная проблема с управлением версиями — вернуть данные в правильном формате для версии мобильного приложения.
Я видел, что есть три основных способа сделать это.
A. Один из способов — иметь один обработчик маршрута на /, а затем позволить этой функции анализировать URL-адрес для управления версиями.
Пример:
func main() {
http.HandleFunc("/", routes.ParseFullURI)
}
B. Используйте библиотеку, такую как gorilla/mux, для обработки шаблонов внутри маршрутизатора, но я видел некоторые предупреждает, что это может быть слишком медленно.
Пример:
func main() {
mux.HandleFunc("{version:}/", routes.ParseVersionForHome)
mux.HandleFunc("{version:}/getData", routes.ParseVersionForGetDAta)
mux.HandleFunc("{version:}/otherCall", routes.ParseVersionForOtherCall)
}
C. Иметь отдельные URL-адреса, которые не меняются, но на основе заголовка делятся на разные версии. Пример:
func main() {
http.HandleFunc("/", routes.ParseHeaderForVersionForHome)
http.HandleFunc("/getData", routes.ParseHeaderForVersionForGetData)
http.HandleFunc("/otherCall", routes.ParseHeaderForVersionForOtherCall)
}
Я обеспокоен тем, что вариант 1 будет слишком грязным с точки зрения кода. Я обеспокоен тем, что вариант 2 будет слишком медленным с точки зрения производительности, и я обеспокоен тем, что вариант 3 будет труден для обработки клиентом или может привести к путанице, поскольку версия не имеет четкой маркировки.
Какой метод является наиболее идиоматичным для Go и обеспечит наибольшую производительность для мобильного приложения, которое будет часто проводить опрос?
http://example.com/api/v1/…
. Или вы больше спрашиваете, как реализовать такой шаблон на сервере Go? - person Dave C   schedule 21.04.2015http.ServeMux
). 3 не имеет ничего общего с Go, просто хотите ли вы, чтобы ваши клиенты использовали заголовки или нет (что не должно иметь большого значения) - person JimB   schedule 21.04.2015