Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

การจัดการ Version ของ API

บทความนี้กล่าวถึงความสำคัญของการจัดการ Version ของ API เพื่อรองรับการเปลี่ยนแปลงโดยไม่กระทบผู้ใช้งานเดิม โดยนำเสนอสองวิธีหลักคือ URL Versioning ที่ง่ายต่อการใช้...

การจัดการ Version ของ API

เมื่อ API ของคุณถูกใช้งานจริงและมีผู้ใช้งานจำนวนมาก สิ่งที่หลีกเลี่ยงไม่ได้คือการเปลี่ยนแปลง API ไม่ว่าจะเป็นการเพิ่มฟีเจอร์ใหม่ แก้ไขข้อผิดพลาด หรือปรับปรุงประสิทธิภาพ การเปลี่ยนแปลงเหล่านี้อาจส่งผลกระทบต่อผู้ใช้งานเดิม ดังนั้นการจัดการ Version ของ API จึงเป็นสิ่งสำคัญเพื่อให้ผู้ใช้งานสามารถเลือกใช้ API ใน Version ที่เหมาะสมกับตนเองได้

ในบทนี้ เราจะมาเรียนรู้วิธีการจัดการ Version ของ API ใน PHP โดยจะครอบคลุมถึงวิธีการที่นิยมใช้กันคือ URL Versioning และ Header Versioning พร้อมทั้งข้อดีข้อเสียของแต่ละวิธี

ทำไมต้องจัดการ Version ของ API?

ลองจินตนาการว่าคุณกำลังใช้งาน API ที่ให้บริการข้อมูลสภาพอากาศ วันหนึ่งผู้ให้บริการ API ตัดสินใจเปลี่ยนโครงสร้างข้อมูลที่ส่งกลับมา จากเดิมที่ส่งค่าอุณหภูมิเป็นองศาเซลเซียส กลายเป็นส่งเป็นองศาฟาเรนไฮต์แทน หากคุณไม่ได้เตรียมตัวรับมือกับการเปลี่ยนแปลงนี้ แอปพลิเคชันของคุณอาจแสดงผลข้อมูลที่ผิดพลาดหรือไม่ทำงานเลยก็ได้

การจัดการ Version ของ API ช่วยป้องกันปัญหาเหล่านี้ได้ โดยการอนุญาตให้ผู้ใช้งานเลือกใช้ API ใน Version ที่ตนเองต้องการ ผู้ใช้งานสามารถค่อยๆ ปรับปรุงแอปพลิเคชันของตนเองให้รองรับ Version ใหม่ของ API ได้โดยไม่ต้องกังวลว่าแอปพลิเคชันจะหยุดทำงานทันที

วิธีการจัดการ Version ของ API

มีหลายวิธีในการจัดการ Version ของ API แต่ที่นิยมใช้กันมี 2 วิธีหลักๆ คือ:

  • URL Versioning: การระบุ Version ของ API ใน URL
  • Header Versioning: การระบุ Version ของ API ใน HTTP Header

1. URL Versioning

URL Versioning เป็นวิธีที่ง่ายและตรงไปตรงมาที่สุดในการจัดการ Version ของ API โดยการใส่ Version ของ API ไว้ใน URL เช่น:

/api/v1/products
/api/v2/products

ในตัวอย่างนี้ /api/v1/products คือ API endpoint สำหรับ Version 1 และ /api/v2/products คือ API endpoint สำหรับ Version 2

ข้อดีของ URL Versioning:

  • ง่ายต่อการทำความเข้าใจ: ผู้ใช้งานสามารถเห็น Version ของ API ได้อย่างชัดเจนจาก URL
  • ใช้งานง่าย: การระบุ Version เพียงแค่ใส่ไว้ใน URL
  • Cacheable: สามารถ Cache API response ได้ง่ายเนื่องจาก URL เป็น unique identifier

ข้อเสียของ URL Versioning:

  • URL ดูไม่สวยงาม: URL อาจจะยาวและดูรกหากมีการระบุ Version
  • อาจต้องแก้ไข code หลายที่: หากมีการเปลี่ยนแปลง Version อาจต้องแก้ไข code ในหลายส่วนที่เกี่ยวข้องกับ URL

ตัวอย่างการ Implement URL Versioning ใน PHP:

<?php

$version = isset($_GET['version']) ? $_GET['version'] : 'v1'; // กำหนด default version เป็น v1

if ($version == 'v1') {
  // logic สำหรับ API Version 1
  $products = [
    ['id' => 1, 'name' => 'Product A (v1)'],
    ['id' => 2, 'name' => 'Product B (v1)']
  ];
} elseif ($version == 'v2') {
  // logic สำหรับ API Version 2
  $products = [
    ['id' => 1, 'name' => 'Product A (v2)', 'price' => 100],
    ['id' => 2, 'name' => 'Product B (v2)', 'price' => 200]
  ];
} else {
  // Handle invalid version
  http_response_code(400); // Bad Request
  echo json_encode(['error' => 'Invalid API version']);
  exit;
}

header('Content-Type: application/json');
echo json_encode($products);

?>

วิธีใช้งาน:

  • เรียก API Version 1: /api/products.php?version=v1
  • เรียก API Version 2: /api/products.php?version=v2

ข้อผิดพลาดที่พบบ่อย:

  • ลืมกำหนด Default Version: หากผู้ใช้งานไม่ได้ระบุ Version ควรมี Default Version เพื่อให้ API ยังคงทำงานได้
  • ไม่ Handle Invalid Version: ควรมี logic สำหรับจัดการกรณีที่ผู้ใช้งานระบุ Version ที่ไม่ถูกต้อง

2. Header Versioning

Header Versioning เป็นวิธีที่ซับซ้อนกว่า URL Versioning เล็กน้อย โดยการระบุ Version ของ API ใน HTTP Header ตัวอย่างเช่น:

Accept: application/vnd.example.v1+json

ในตัวอย่างนี้ application/vnd.example.v1+json คือ MIME type ที่ระบุว่าผู้ใช้งานต้องการใช้ API Version 1

ข้อดีของ Header Versioning:

  • URL ดูสวยงาม: URL จะสะอาดและไม่รกเนื่องจากไม่มี Version ระบุไว้
  • แยกส่วน Version ออกจาก URL: ทำให้การจัดการ URL ง่ายขึ้น

ข้อเสียของ Header Versioning:

  • ซับซ้อนกว่า: ผู้ใช้งานต้องเข้าใจวิธีการระบุ Version ใน HTTP Header
  • Debugging ยากกว่า: การตรวจสอบ Version ที่ใช้งานจริงอาจต้องใช้ tools ในการ inspect HTTP Header
  • Cacheable ยากกว่า: การ Cache API response อาจซับซ้อนกว่าเนื่องจากต้องพิจารณา HTTP Header ด้วย

ตัวอย่างการ Implement Header Versioning ใน PHP:

<?php

$acceptHeader = isset($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT'] : '';
$version = 'v1'; // กำหนด default version เป็น v1

if (strpos($acceptHeader, 'application/vnd.example.v2+json') !== false) {
  $version = 'v2';
}

if ($version == 'v1') {
  // logic สำหรับ API Version 1
  $products = [
    ['id' => 1, 'name' => 'Product A (v1)'],
    ['id' => 2, 'name' => 'Product B (v1)']
  ];
} elseif ($version == 'v2') {
  // logic สำหรับ API Version 2
  $products = [
    ['id' => 1, 'name' => 'Product A (v2)', 'price' => 100],
    ['id' => 2, 'name' => 'Product B (v2)', 'price' => 200]
  ];
} else {
  // Handle invalid version
  http_response_code(400); // Bad Request
  echo json_encode(['error' => 'Invalid API version']);
  exit;
}

header('Content-Type: application/json');
echo json_encode($products);

?>

วิธีใช้งาน:

  • เรียก API Version 1: ส่ง HTTP Header Accept: application/vnd.example.v1+json (หรือไม่ต้องส่ง Header ก็ได้ เพราะเป็น Default)
  • เรียก API Version 2: ส่ง HTTP Header Accept: application/vnd.example.v2+json

ข้อผิดพลาดที่พบบ่อย:

  • ลืมกำหนด Default Version: หากผู้ใช้งานไม่ได้ระบุ Header ควรมี Default Version เพื่อให้ API ยังคงทำงานได้
  • ไม่ Handle Invalid Header: ควรมี logic สำหรับจัดการกรณีที่ผู้ใช้งานส่ง Header ที่ไม่ถูกต้อง
  • Client ไม่ส่ง Header ที่ถูกต้อง: Client อาจจะไม่เข้าใจวิธีการส่ง Header ที่ถูกต้อง

สรุป

การจัดการ Version ของ API เป็นสิ่งสำคัญเพื่อให้ API สามารถเปลี่ยนแปลงได้โดยไม่ส่งผลกระทบต่อผู้ใช้งานเดิม URL Versioning เป็นวิธีที่ง่ายและตรงไปตรงมา ในขณะที่ Header Versioning มีความซับซ้อนกว่าแต่ให้ URL ที่สะอาดกว่า การเลือกใช้วิธีใดขึ้นอยู่กับความเหมาะสมของแต่ละโปรเจ็กต์

ในบทถัดไป เราจะมาเรียนรู้วิธีการ Document API ด้วย Swagger/OpenAPI ซึ่งเป็นเครื่องมือที่ช่วยให้เราสร้างเอกสาร API ที่สมบูรณ์และใช้งานง่าย

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service