본문으로 건너뛰기

เนื้อหาภาษาไทย / 태국어 콘텐츠

시스템 가이드 검수 완료된 콘텐츠

การจัดการ Error ใน API

บทนี้เน้นย้ำถึงความสำคัญของการจัดการ Error ใน API เพื่อให้ Client เข้าใจปัญหาและแก้ไขได้ โดยอธิบายถึงการใช้ `try-catch` ใน PHP เพื่อจัดการ Exception และการสร้าง...

การจัดการ Error ใน API

เมื่อสร้าง API สิ่งสำคัญอย่างยิ่งคือการจัดการข้อผิดพลาด (Error Handling) อย่างเหมาะสม เพื่อให้ Client ที่เรียกใช้งาน API สามารถเข้าใจได้ว่าเกิดอะไรขึ้น และสามารถแก้ไขปัญหาได้อย่างถูกต้อง การจัดการ Error ที่ดีจะช่วยให้ API ของคุณมีความน่าเชื่อถือและใช้งานง่ายยิ่งขึ้น

ทำไมต้องจัดการ Error?

  • ให้ข้อมูลที่ชัดเจน: Client ต้องการทราบว่าเกิดอะไรผิดพลาด เพื่อที่จะแก้ไขปัญหาได้
  • ป้องกันการ Crash: การจัดการ Error ช่วยป้องกันไม่ให้ API ของคุณหยุดทำงาน (Crash) เมื่อเกิดข้อผิดพลาดที่ไม่คาดฝัน
  • รักษาความปลอดภัย: การจัดการ Error ที่ไม่ดี อาจทำให้ข้อมูลสำคัญรั่วไหลได้
  • ประสบการณ์ที่ดีของผู้ใช้: API ที่จัดการ Error ได้ดีจะช่วยให้ผู้ใช้งาน API มีประสบการณ์ที่ดี

การใช้ Try-Catch ใน PHP

try-catch เป็นโครงสร้างพื้นฐานในการจัดการ Exception (ข้อยกเว้น) ใน PHP เมื่อเกิด Exception ขึ้นใน Block try โปรแกรมจะกระโดดไปยัง Block catch เพื่อจัดการกับ Exception นั้น

try {
    // โค้ดที่อาจทำให้เกิด Exception
    $result = 10 / 0; // การหารด้วย 0 จะทำให้เกิด Exception
    echo "ผลลัพธ์คือ: " . $result; // บรรทัดนี้จะไม่ถูก Execute หากเกิด Exception
} catch (Exception $e) {
    // โค้ดสำหรับจัดการ Exception
    echo "เกิดข้อผิดพลาด: " . $e->getMessage();
}

คำอธิบาย:

  • try: Block ที่เราใส่โค้ดที่อาจทำให้เกิด Exception
  • catch (Exception $e): Block ที่เราจะจัดการกับ Exception ที่เกิดขึ้น โดย $e เป็น Object ของ Exception ที่เกิดขึ้น เราสามารถใช้ Method getMessage() เพื่อดึงข้อความ Error ได้

การสร้าง Error Response

เมื่อเกิด Error ใน API เราควรส่ง Response กลับไปยัง Client ที่มีข้อมูลเกี่ยวกับ Error นั้น โดยทั่วไปเราจะใช้ JSON Format ในการส่ง Error Response และกำหนด HTTP Status Code ที่เหมาะสม

<?php
// กำหนด Header เป็น JSON
header('Content-Type: application/json');

try {
    // โค้ดที่อาจทำให้เกิด Exception
    $id = $_GET['id'];
    if (!is_numeric($id)) {
        throw new Exception("ID ต้องเป็นตัวเลขเท่านั้น");
    }
    // สมมติว่ามี Function ดึงข้อมูลจาก Database
    $data = getDataFromDatabase($id);

    if ($data === null) {
        throw new Exception("ไม่พบข้อมูลสำหรับ ID: " . $id);
    }

    echo json_encode([
        'status' => 'success',
        'data' => $data
    ]);

} catch (Exception $e) {
    // สร้าง Error Response
    http_response_code(400); // Bad Request

    echo json_encode([
        'status' => 'error',
        'message' => $e->getMessage()
    ]);
}

function getDataFromDatabase($id) {
    // จำลองการดึงข้อมูลจาก Database
    if ($id == 1) {
        return ['name' => 'Product 1', 'price' => 100];
    } else {
        return null; // ไม่พบข้อมูล
    }
}
?>

คำอธิบาย:

  • header('Content-Type: application/json');: กำหนดว่า Response ที่ส่งออกไปจะเป็น JSON
  • http_response_code(400);: กำหนด HTTP Status Code เป็น 400 (Bad Request) ซึ่งหมายถึง Client ส่ง Request ที่ไม่ถูกต้อง
  • json_encode([...]): สร้าง JSON String จาก Array ที่มีข้อมูล Error
  • $e->getMessage(): ดึงข้อความ Error จาก Exception Object

HTTP Status Codes สำหรับ Error ที่ควรรู้

HTTP Status Codes เป็นส่วนสำคัญในการสื่อสาร Error ให้กับ Client การเลือก Status Code ที่ถูกต้องจะช่วยให้ Client เข้าใจปัญหาได้ง่ายขึ้น

  • 400 Bad Request: Client ส่ง Request ที่ไม่ถูกต้อง เช่น ข้อมูลไม่ครบถ้วน, รูปแบบข้อมูลไม่ถูกต้อง
  • 401 Unauthorized: Client ไม่ได้รับอนุญาตให้เข้าถึง Resource นี้ (ไม่มี Authentication)
  • 403 Forbidden: Client ไม่ได้รับอนุญาตให้เข้าถึง Resource นี้ (มี Authentication แต่ไม่มีสิทธิ์)
  • 404 Not Found: ไม่พบ Resource ที่ระบุ
  • 500 Internal Server Error: เกิด Error ภายใน Server (โดยทั่วไปควรหลีกเลี่ยงการส่ง Status Code นี้โดยตรง ควร Log Error เพื่อตรวจสอบ)
  • 503 Service Unavailable: Server ไม่พร้อมให้บริการชั่วคราว

ตัวอย่างการใช้งาน HTTP Status Codes:

<?php
header('Content-Type: application/json');

try {
    $productId = $_GET['product_id'];

    // ตรวจสอบว่า product_id เป็นตัวเลขหรือไม่
    if (!is_numeric($productId)) {
        http_response_code(400); // Bad Request
        echo json_encode(['status' => 'error', 'message' => 'product_id ต้องเป็นตัวเลข']);
        exit;
    }

    $product = getProduct($productId);

    // ตรวจสอบว่าพบ Product หรือไม่
    if (!$product) {
        http_response_code(404); // Not Found
        echo json_encode(['status' => 'error', 'message' => 'ไม่พบ Product ที่มี ID: ' . $productId]);
        exit;
    }

    echo json_encode(['status' => 'success', 'product' => $product]);

} catch (Exception $e) {
    http_response_code(500); // Internal Server Error
    echo json_encode(['status' => 'error', 'message' => 'เกิดข้อผิดพลาดภายใน Server: ' . $e->getMessage()]);
    // ควร Log Error ที่ Server เพื่อตรวจสอบ
    error_log($e->getMessage());
}

function getProduct($productId) {
    // จำลองการดึงข้อมูล Product จาก Database
    $products = [
        1 => ['id' => 1, 'name' => 'Product A', 'price' => 50],
        2 => ['id' => 2, 'name' => 'Product B', 'price' => 75]
    ];

    if (isset($products[$productId])) {
        return $products[$productId];
    } else {
        return false;
    }
}
?>

สรุป

การจัดการ Error เป็นส่วนสำคัญในการสร้าง API ที่มีคุณภาพ การใช้ try-catch, การสร้าง Error Response ที่มีข้อมูลชัดเจน, และการเลือกใช้ HTTP Status Codes ที่ถูกต้อง จะช่วยให้ Client สามารถเข้าใจและแก้ไขปัญหาได้อย่างมีประสิทธิภาพ ในบทต่อไปเราจะพูดถึง HTTP Status Codes ที่ควรรู้ให้ละเอียดมากยิ่งขึ้น

Office.in.th Custom Service

이 구조를 바탕으로 시스템을 개발하거나 맞춤 변경하고 싶으신가요?

Office.in.th는 엔터프라이즈 웹 애플리케이션, API 연동, 공공/민간 업무 관리 시스템을 설계·개발하며 장기 지원을 제공합니다.

소프트웨어 개발 서비스 보기