メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

HTTP Status Codes ที่ควรรู้

HTTP Status Codes ที่ควรรู้

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

HTTP Status Codes คือตัวเลข 3 หลักที่ Server ส่งกลับมาพร้อมกับ HTTP Response แต่ละครั้ง ตัวเลขเหล่านี้แบ่งออกเป็น 5 กลุ่มหลักๆ ตามหลักแรกของตัวเลข:

  • 1xx (Informational): ข้อมูลเพิ่มเติม กำลังดำเนินการ
  • 2xx (Successful): สำเร็จ
  • 3xx (Redirection): การเปลี่ยนเส้นทาง
  • 4xx (Client Error): ข้อผิดพลาดจาก Client
  • 5xx (Server Error): ข้อผิดพลาดจาก Server

ในบทเรียนนี้ เราจะเน้นไปที่ Status Codes ที่พบบ่อยและสำคัญในการพัฒนา API ระดับเริ่มต้น:

200 OK

200 OK คือ Status Code ที่บ่งบอกว่า Request ของ Client สำเร็จลุล่วงไปด้วยดี โดยทั่วไปแล้วจะใช้เมื่อ Client ร้องขอข้อมูล (GET) และ Server สามารถส่งข้อมูลกลับไปได้ตามที่ร้องขอ

ตัวอย่าง:

<?php
  // ดึงข้อมูลผู้ใช้จากฐานข้อมูล (สมมติ)
  $user = [
    'id' => 123,
    'name' => 'John Doe',
    'email' => 'john.doe@example.com'
  ];

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

  // ส่ง Status Code 200 OK
  http_response_code(200);

  // ส่งข้อมูลผู้ใช้กลับไปในรูปแบบ JSON
  echo json_encode($user);
?>

ในตัวอย่างนี้ เราดึงข้อมูลผู้ใช้ (สมมติ) และส่งกลับไปในรูปแบบ JSON พร้อมกับ Status Code 200 OK ซึ่งบ่งบอกว่าทุกอย่างเป็นไปด้วยดี

201 Created

201 Created คือ Status Code ที่ใช้เมื่อ Client ส่งข้อมูลใหม่มาสร้าง (POST) และ Server สามารถสร้าง Resource ใหม่ได้สำเร็จ Status Code นี้มักจะมาพร้อมกับ Header Location ที่ระบุ URL ของ Resource ที่สร้างขึ้นใหม่

ตัวอย่าง:

<?php
  // รับข้อมูลผู้ใช้จาก Request (สมมติ)
  $userData = json_decode(file_get_contents('php://input'), true);

  // สร้างผู้ใช้ใหม่ในฐานข้อมูล (สมมติ)
  // ... โค้ดสำหรับสร้างผู้ใช้ในฐานข้อมูล ...

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

  // ส่ง Status Code 201 Created
  http_response_code(201);

  // กำหนด Header Location เพื่อระบุ URL ของ Resource ที่สร้างขึ้นใหม่
  header('Location: /users/'. $newUserId); // สมมติว่า $newUserId คือ ID ของผู้ใช้ที่สร้างขึ้น

  // ส่งข้อมูลผู้ใช้ที่สร้างขึ้นใหม่กลับไปในรูปแบบ JSON (Optional)
  echo json_encode(['id' => $newUserId, 'message' => 'User created successfully']);
?>

ในตัวอย่างนี้ เราสร้างผู้ใช้ใหม่จากข้อมูลที่ได้รับจาก Client และส่งกลับ Status Code 201 Created พร้อมกับ Header Location ที่ระบุ URL ของผู้ใช้ที่สร้างขึ้นใหม่

400 Bad Request

400 Bad Request คือ Status Code ที่ใช้เมื่อ Request ของ Client ไม่ถูกต้องหรือไม่สมบูรณ์ อาจเกิดจากข้อมูลที่ส่งมาไม่ถูกต้อง, ข้อมูลที่จำเป็นขาดหายไป, หรือรูปแบบของข้อมูลไม่ถูกต้อง

ตัวอย่าง:

<?php
  // รับข้อมูลผู้ใช้จาก Request (สมมติ)
  $userData = json_decode(file_get_contents('php://input'), true);

  // ตรวจสอบว่ามีข้อมูลที่จำเป็นหรือไม่
  if (!isset($userData['name']) || !isset($userData['email'])) {
    // กำหนด Header เป็น JSON
    header('Content-Type: application/json');

    // ส่ง Status Code 400 Bad Request
    http_response_code(400);

    // ส่ง Error Message กลับไปในรูปแบบ JSON
    echo json_encode(['error' => 'Missing required fields (name, email)']);
    exit;
  }

  // ... โค้ดสำหรับสร้างผู้ใช้ (ถ้าข้อมูลถูกต้อง) ...
?>

ในตัวอย่างนี้ เราตรวจสอบว่าข้อมูลที่ Client ส่งมามีข้อมูลที่จำเป็น (name, email) หรือไม่ ถ้าไม่มี เราจะส่ง Status Code 400 Bad Request พร้อมกับ Error Message ที่ระบุว่ามีข้อมูลอะไรที่ขาดหายไป

404 Not Found

404 Not Found คือ Status Code ที่ใช้เมื่อ Client พยายามเข้าถึง Resource ที่ไม่มีอยู่บน Server อาจเกิดจากการพิมพ์ URL ผิด หรือ Resource นั้นถูกลบไปแล้ว

ตัวอย่าง:

<?php
  // ดึงข้อมูลผู้ใช้จากฐานข้อมูล (สมมติ)
  $userId = $_GET['id']; // สมมติว่า Client ส่ง ID ของผู้ใช้มาใน URL
  $user = getUserFromDatabase($userId); // ฟังก์ชันสมมติสำหรับดึงข้อมูลผู้ใช้จากฐานข้อมูล

  // ตรวจสอบว่าพบผู้ใช้หรือไม่
  if (!$user) {
    // กำหนด Header เป็น JSON
    header('Content-Type: application/json');

    // ส่ง Status Code 404 Not Found
    http_response_code(404);

    // ส่ง Error Message กลับไปในรูปแบบ JSON
    echo json_encode(['error' => 'User not found']);
    exit;
  }

  // ... ส่งข้อมูลผู้ใช้กลับไป (ถ้าพบผู้ใช้) ...
?>

ในตัวอย่างนี้ เราพยายามดึงข้อมูลผู้ใช้จากฐานข้อมูลโดยใช้ ID ที่ได้รับจาก Client ถ้าไม่พบผู้ใช้ เราจะส่ง Status Code 404 Not Found พร้อมกับ Error Message ที่ระบุว่าไม่พบผู้ใช้

500 Internal Server Error

500 Internal Server Error คือ Status Code ที่ใช้เมื่อเกิดข้อผิดพลาดที่ไม่คาดฝันขึ้นบน Server ข้อผิดพลาดนี้อาจเกิดจาก Bug ในโค้ด, ปัญหาในการเชื่อมต่อกับฐานข้อมูล, หรือปัญหาอื่นๆ ที่ Server ไม่สามารถแก้ไขได้เอง

ตัวอย่าง:

<?php
  try {
    // พยายามเชื่อมต่อกับฐานข้อมูล
    $db = new PDO('mysql:host=localhost;dbname=mydb', 'user', 'password');

    // ... ทำงานกับฐานข้อมูล ...

  } catch (PDOException $e) {
    // กำหนด Header เป็น JSON
    header('Content-Type: application/json');

    // ส่ง Status Code 500 Internal Server Error
    http_response_code(500);

    // ส่ง Error Message กลับไปในรูปแบบ JSON (ควร Log Error จริงๆ แทนที่จะส่งให้ Client โดยตรง)
    echo json_encode(['error' => 'Internal Server Error']);
    // ควร Log error นี้เพื่อตรวจสอบและแก้ไขต่อไป
    error_log($e->getMessage());
    exit;
  }
?>

ในตัวอย่างนี้ เราใช้ try-catch เพื่อดักจับ Exception ที่อาจเกิดขึ้นระหว่างการเชื่อมต่อกับฐานข้อมูล ถ้าเกิด Exception ขึ้น เราจะส่ง Status Code 500 Internal Server Error พร้อมกับ Error Message (ในความเป็นจริง ควร Log Error นี้แทนที่จะส่งให้ Client โดยตรงเพื่อความปลอดภัย) และควร Log ข้อผิดพลาดเพื่อนำไปวิเคราะห์และแก้ไข

ข้อควรจำ: ในกรณีของ 500 Internal Server Error ไม่ควรเปิดเผยรายละเอียดของข้อผิดพลาดให้ Client ทราบโดยตรง เพราะอาจเป็นช่องทางให้ผู้ไม่หวังดีใช้โจมตีระบบได้ ควร Log ข้อผิดพลาดไว้เพื่อตรวจสอบและแก้ไขต่อไป

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

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る