Contents

    Server response 428 Precondition Required

    HTTP สถานะรหัส 428 (Precondition Required)

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

    428 - Precondition Required

    ตัวอย่างการใช้งานสถานะ 428

    • สถานการณ์การเปลี่ยนแปลงทรัพยากร

      ตัวอย่าง: ลูกค้าพยายามอัปเดตทรัพยากร แต่ไม่ได้ระบุเงื่อนไขที่จำเป็นสำหรับการเปลี่ยนแปลงนั้น

      การอธิบาย: เซิร์ฟเวอร์อาจไม่ดำเนินการคำขอหากลูกค้าไม่จัดเตรียมเงื่อนไขที่จำเป็น เช่น หากทรัพยากรถูกเปลี่ยนแปลงโดยลูกค้าคนอื่น

    • การควบคุมเวอร์ชัน

      ตัวอย่าง: เมื่อลูกค้าพยายามลบหรือเปลี่ยนแปลงทรัพยากร ลูกค้าจำเป็นต้องระบุว่าทำงานกับเวอร์ชันล่าสุดของทรัพยากร (เช่น การใช้ส่วนหัว If-Match)

      การอธิบาย: สถานะ 428 อาจถูกส่งกลับหากลูกค้าไม่ได้ระบุส่วนหัวที่จำเป็นสำหรับการตรวจสอบเวอร์ชันของทรัพยากร

    • การแคชและสถานะ

      ตัวอย่าง: ลูกค้าขอข้อมูลที่อาจมีการเปลี่ยนแปลง แต่ไม่ได้ระบุว่าพร้อมที่จะทำงานกับข้อมูลที่เป็นปัจจุบันเท่านั้น (เช่น ส่วนหัว If-None-Match)

      การอธิบาย: เซิร์ฟเวอร์อาจต้องการเงื่อนไขเพื่อหลีกเลี่ยงการให้ข้อมูลที่ล้าสมัย

    ตัวอย่างการแก้ไขข้อผิดพลาด 428 ในภาษาการเขียนโปรแกรมต่างๆ

    1. JavaScript (ใช้ Fetch API)
      const url = 'https://api.example.com/resource';
      const headers = new Headers({
          'If-Match': 'etag_value' // ระบุ ETag สำหรับการตรวจสอบเวอร์ชัน
      });
      
      fetch(url, {
          method: 'PUT',
          headers: headers,
          body: JSON.stringify({ data: 'new data' })
      })
      .then(response => {
          if (response.status === 428) {
              console.error('จำเป็นต้องมีเงื่อนไขสำหรับการดำเนินการคำขอ');
          }
      });
              
    2. Python (ใช้ requests)
      import requests
      
      url = 'https://api.example.com/resource'
      headers = {
          'If-Match': 'etag_value'  # ระบุ ETag สำหรับการตรวจสอบเวอร์ชัน
      }
      
      response = requests.put(url, headers=headers, json={'data': 'new data'})
      if response.status_code == 428:
          print('จำเป็นต้องมีเงื่อนไขสำหรับการดำเนินการคำขอ')
              
    3. PHP
      $url = 'https://api.example.com/resource';
      $options = [
          'http' => [
              'header' => "If-Match: etag_value\r\n", // ระบุ ETag สำหรับการตรวจสอบเวอร์ชัน
              'method' => 'PUT',
              'content' => json_encode(['data' => 'new data']),
          ],
      ];
      
      $context = stream_context_create($options);
      $result = file_get_contents($url, false, $context);
      if ($http_response_header[0] === 'HTTP/1.1 428 Precondition Required') {
          echo 'จำเป็นต้องมีเงื่อนไขสำหรับการดำเนินการคำขอ';
      }
              

    การเปรียบเทียบสถานะ 428 กับสถานะ HTTP อื่นๆ

    สถานะ ความหมาย การใช้งาน
    428 จำเป็นต้องมีเงื่อนไข ใช้เมื่อเซิร์ฟเวอร์ต้องการให้ลูกค้าระบุเงื่อนไขก่อนดำเนินการคำขอ
    400 ข้อผิดพลาดคำขอไม่ถูกต้อง ใช้เมื่อคำขอไม่ตรงตามรูปแบบที่เซิร์ฟเวอร์คาดหวัง
    409 ความขัดแย้ง ใช้เมื่อมีความขัดแย้งระหว่างคำขอกับสถานะปัจจุบันของทรัพยากร

    การทำความเข้าใจ HTTP สถานะรหัส 428 เป็นสิ่งสำคัญสำหรับนักพัฒนา API เพื่อให้แน่ใจว่าการสื่อสารระหว่างเซิร์ฟเวอร์และลูกค้าเป็นไปอย่างราบรื่นและมีประสิทธิภาพ