PlusMagi's Blog By Pitt Phunsanit Backend PHP: การส่งสถานะ HTTP Status Code ที่ถูกต้องตอบกลับ API

PHP: การส่งสถานะ HTTP Status Code ที่ถูกต้องตอบกลับ API

ในโลกของการพัฒนาเว็บแอปพลิเคชันยุคใหม่ โดยเฉพาะอย่างยิ่งการสร้าง RESTful APIs (Application Programming Interfaces) การตอบกลับข้อมูลไม่ได้มีเพียงแค่ “เนื้อหา” (Response Body) เท่านั้น แต่สิ่งที่สำคัญไม่แพ้กันคือ HTTP Status Code

ในฐานะ Senior Architect การเข้าใจและใช้งาน Status Code อย่างถูกต้องถือเป็นรากฐานสำคัญของการออกแบบ API ที่มีมาตรฐาน (Standardized) และเชื่อถือได้ การส่งสถานะโค้ดที่ไม่ถูกต้องจะทำให้ผู้ใช้ API ปลายทางเกิดความสับสนและตีความว่าการเชื่อมต่อมีปัญหา แม้ว่าข้อมูลใน JSON Body จะสมบูรณ์ก็ตาม

HTTP Status Code คืออะไร และทำไมต้องสำคัญ?

HTTP Status Code คือตัวเลขสามหลักที่ระบุว่าคำขอ (Request) ของไคลเอนต์ (Client) ไปถึงเซิร์ฟเวอร์เรียบร้อยแล้วหรือไม่ และเซิร์ฟเวอร์ดำเนินการตามที่ร้องขอสำเร็จหรือไม่ การที่ระบบของคุณตอบกลับด้วยโค้ดที่แม่นยำจะช่วยให้ผู้เรียกใช้ API สามารถจัดการ Flow การทำงานได้อย่างอัตโนมัติ (Automated Error Handling) โดยไม่ต้องมาวิเคราะห์ข้อความ (Error Message) ที่อยู่ใน Body เสมอไป

ความสำคัญในการออกแบบ API (Why It Matters)

  • การสื่อสารที่เป็นมาตรฐาน (Standard Communication): โค้ดเป็นภาษาที่เครื่องจักรเข้าใจ ทำให้ระบบที่เรียกใช้ API ของคุณสามารถตัดสินใจได้ทันที เช่น ถ้าโค้ดเป็น 403 (Forbidden) ระบบจะทราบทันทีว่าถูกปฏิเสธสิทธิ์ โดยไม่จำเป็นต้องอ่าน Error Message
  • การแยกแยะประเภทข้อผิดพลาด: การแยกแยะระหว่างข้อผิดพลาดที่เกิดจากไคลเอนต์ (Client Error, เช่น 400) และข้อผิดพลาดที่เกิดจากเซิร์ฟเวอร์ (Server Error, เช่น 500) เป็นสิ่งสำคัญในการ Debug และการปรับปรุงระบบ

การใช้งาน PHP เพื่อกำหนด Status Code ที่ถูกต้อง

ในภาษา PHP เราสามารถกำหนด HTTP Status Code ได้โดยใช้ฟังก์ชัน http_response_code() หรือการตั้งค่า Header โดยตรง การเลือกใช้โค้ดที่เหมาะสมขึ้นอยู่กับผลลัพธ์ของการดำเนินการ:

✅ กรณีสำเร็จ (Success Codes)

ใช้เมื่อการดำเนินการสำเร็จลุล่วงตามที่คาดหวัง:

  • 200 OK: ใช้สำหรับคำขอ GET หรือ PUT ทั่วไป ที่เรียกดูหรืออัปเดตข้อมูลสำเร็จ
  • 201 Created: ใช้สำหรับคำขอ POST ที่เป็นการสร้างทรัพยากรใหม่ (Resource Creation)

PHP

// ตัวอย่าง: การสร้างข้อมูลใหม่ (POST) และคืนค่า 201 Created
http_response_code(201);
header("Content-Type: application/json");

$data = ['message' => 'User created successfully'];
echo json_encode($data);

⚠️ กรณีข้อผิดพลาดจากไคลเอนต์ (Client Error Codes)

ใช้เมื่อคำขอที่ส่งมามีปัญหา (เช่น ข้อมูลไม่ครบถ้วน หรือไม่มีสิทธิ์):

  • 400 Bad Request: ใช้เมื่อข้อมูลที่ส่งมาไม่ถูกต้องตามรูปแบบที่ API ต้องการ (Validation Error)
  • 404 Not Found: ใช้เมื่อทรัพยากรที่ร้องขอไม่มีอยู่จริง

PHP

// ตัวอย่าง: การค้นหาข้อมูลที่ไม่มีอยู่ (404 Not Found)
http_response_code(404);
header("Content-Type: application/json");

echo json_encode(['error' => 'Resource not found']);

🚨 กรณีข้อผิดพลาดจากเซิร์ฟเวอร์ (Server Error Codes)

ใช้เมื่อเกิดปัญหาภายในระบบ เช่น การเชื่อมต่อฐานข้อมูลล้มเหลว (Database Connection Failure) หรือ Logic Error:

  • 500 Internal Server Error: ใช้เมื่อเกิดข้อผิดพลาดที่ไม่คาดคิดในฝั่งเซิร์ฟเวอร์

PHP

// ตัวอย่าง: การจัดการ Exception เมื่อ DB ล่ม
try {
    // โค้ดที่เชื่อมต่อ PostgreSQL
} catch (Exception $e) {
    http_response_code(500);
    header("Content-Type: application/json");
    echo json_encode(['error' => 'Internal server error: ' . $e->getMessage()]);
}

บทสรุปสำหรับสถาปนิกระบบ

การส่ง HTTP Status Code ที่ถูกต้องไม่ใช่แค่รายละเอียดทางเทคนิค แต่เป็นส่วนหนึ่งของการออกแบบสถาปัตยกรรม API ที่แข็งแกร่ง (Robust Architecture) การให้ความสำคัญกับการกำหนดโค้ดที่แม่นยำในทุกสถานการณ์ (Success, Client Error, Server Error) จะช่วยให้ระบบของคุณสามารถสื่อสารกับผู้ใช้งานปลายทางได้อย่างชัดเจน ลดความซับซ้อนในการเขียนโค้ดฝั่ง Client และยกระดับคุณภาพของ API ให้เป็นระดับมาตรฐานสากล

Exit mobile version