Server response 428 Precondition Required
HTTP สถานะรหัส 428 (Precondition Required)
HTTP สถานะรหัส 428 ถูกใช้เพื่อบ่งชี้ว่าบริการจะต้องมีการดำเนินการตามเงื่อนไขที่กำหนดก่อนที่จะดำเนินการคำขอ หากเงื่อนไขเหล่านี้ไม่ได้ถูกระบุไว้ จะทำให้คำขอไม่ถูกดำเนินการ โดยเฉพาะเมื่อมีการโต้ตอบกับ API ที่สำคัญในการพิจารณาสถานะก่อนหน้าในทรัพยากรต่างๆ
ตัวอย่างการใช้งานสถานะ 428
-
สถานการณ์การเปลี่ยนแปลงทรัพยากร
ตัวอย่าง: ลูกค้าพยายามอัปเดตทรัพยากร แต่ไม่ได้ระบุเงื่อนไขที่จำเป็นสำหรับการเปลี่ยนแปลงนั้น
การอธิบาย: เซิร์ฟเวอร์อาจไม่ดำเนินการคำขอหากลูกค้าไม่จัดเตรียมเงื่อนไขที่จำเป็น เช่น หากทรัพยากรถูกเปลี่ยนแปลงโดยลูกค้าคนอื่น
-
การควบคุมเวอร์ชัน
ตัวอย่าง: เมื่อลูกค้าพยายามลบหรือเปลี่ยนแปลงทรัพยากร ลูกค้าจำเป็นต้องระบุว่าทำงานกับเวอร์ชันล่าสุดของทรัพยากร (เช่น การใช้ส่วนหัว If-Match)
การอธิบาย: สถานะ 428 อาจถูกส่งกลับหากลูกค้าไม่ได้ระบุส่วนหัวที่จำเป็นสำหรับการตรวจสอบเวอร์ชันของทรัพยากร
-
การแคชและสถานะ
ตัวอย่าง: ลูกค้าขอข้อมูลที่อาจมีการเปลี่ยนแปลง แต่ไม่ได้ระบุว่าพร้อมที่จะทำงานกับข้อมูลที่เป็นปัจจุบันเท่านั้น (เช่น ส่วนหัว If-None-Match)
การอธิบาย: เซิร์ฟเวอร์อาจต้องการเงื่อนไขเพื่อหลีกเลี่ยงการให้ข้อมูลที่ล้าสมัย
ตัวอย่างการแก้ไขข้อผิดพลาด 428 ในภาษาการเขียนโปรแกรมต่างๆ
-
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('จำเป็นต้องมีเงื่อนไขสำหรับการดำเนินการคำขอ'); } });
-
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('จำเป็นต้องมีเงื่อนไขสำหรับการดำเนินการคำขอ')
-
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 เพื่อให้แน่ใจว่าการสื่อสารระหว่างเซิร์ฟเวอร์และลูกค้าเป็นไปอย่างราบรื่นและมีประสิทธิภาพ