ฉันกำลังสร้างเซิร์ฟเวอร์ใน Go สำหรับแอปมือถือ ฉันต้องสามารถรองรับ API ได้หลายเวอร์ชันในกรณีที่ผู้ใช้ไม่ได้อัปเดตแอป ข้อกังวลหลักของการกำหนดเวอร์ชันคือการส่งคืนข้อมูลในรูปแบบที่ถูกต้องสำหรับเวอร์ชันของแอปบนมือถือ
ฉันเห็นว่ามีวิธีพื้นฐานสามวิธีในการทำเช่นนี้
ก. วิธีหนึ่งคือการมีตัวจัดการเส้นทางหนึ่งตัวบน / จากนั้นอนุญาตให้ฟังก์ชันนั้นแยกวิเคราะห์ 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