มีใครสักคนโทรมาปรึกษากาดเรื่อง การจัดการ Version API ว่าจัดการยังไง ซึ่งในวันนั้นกาดก็ยังเมาหมัดงานตัวเอง เลยเบลอๆและก็ตอบไปแบบเบลอๆ
ทำไมที่ต้องคิดเรื่อง Version API
ในฐานะที่เราเป็นผู้ให้บริการ เรา Provide API ให้ลูกค้าใช้งานหลากหลายที่ และถ้าวันใดวันหนึ่งเรามีการเปลี่ยนแปลงใน API เพื่อให้ระบบของเราให้ดีขึ้น ก็ต้องคำนึงถึงสิ่งที่เราเปลี่ยนแปลงนั้นกระทบกับใครบ้างหรือไม่ที่ใช้งาน API นั้นๆ อยู่
เมื่อไหร่ที่ควรจะปรับ Version API
- มีเพิ่มหรือลด Parameter ใน Request API
- เพิ่มหรือลบ API ในระบบของเรา
- เปลี่ยน Type ของข้อมูล เช่น int ไปเป็น float เป็นต้น
ตัวอย่างของ Version API
- เจ้า A ใช้
/api/v1/confirmPayment
โดย Response ที่ได้เอาแค่ notification message
{
"notify_message": "วันเวลาที่ชำระเงิน 1/3/2020 13:30:00 หมายเลขคำสั่งซื้อ 8004359122 คุณสามารถติดตามสินค้าผ่านช่องทาง Kerry หมายเลข 1785261900"
}
- เจ้า B มาต่อใหม่ ใช้ API เส้นเดียวกันแต่ให้แยก field มาให้หน่อย เดี๋ยวปั้น message เอง จึงปรับ Version ให้เป็น
/api/v2/confirmPayment
โดย Response ที่ให้เจ้า B ใช้
{
"payment_date": "1/3/2020 13:30:00",
"order_id": "8004359122",
"shipping": "Kerry",
"tracking_id": "1785261900"
}
หรือในกรณีที่เราเปลี่ยน Type ข้อมูลหรือเพิ่ม Parameter เข้ามาใหม่ และลูกค้าที่ใช้ API ของเราอยู่ยังไม่พร้อมเปลี่ยนทั้งหมด ก็เพิ่ม route มาอีกเส้น โดยที่เพิ่มเรื่อง Version เข้ามา
ตัวอย่าง
/v1/xxx
/v2/xxx
ซึ่งถ้ามาในกรณีนี้เราจะค่อยๆ ทยอยให้ลูกค้าเปลี่ยนมาใช้ API Version 2 ของเรา โดยที่ Version 1 ยังเปิดให้บริการอยู่ และถ้าเปลี่ยนมาใช้หมดแล้ว เราก็ปิด Version 1 ลง
นี้เป็นเพียงตัวอย่างที่กาดทำมา การจัดการเรื่อง version ควรจะต้องคุยกันตั้งแต่เริ่มออกแบบ spec api :)
เรื่อง API Version ไม่จำเป็นที่จะต้องทำ Version ใน URL ของเราก็ได้นะ มีทำใน Header ก็ได้ อยู่ที่เราตกลงกัน โดยในเว็บไซต์นี้มีตัวอย่างการทำ API Version นอกเหนือจาก URL อยู่สามารถเข้าไปดูเพิ่มเติมได้