การเลือก Status Code
status code เพียงไม่กี่ตัวครอบคลุมเกือบทุกกรณี ความเชี่ยวชาญอยู่ที่กรณีใกล้เคียงกัน — คู่ที่สับสนได้ง่าย
ตัวที่คุณใช้งานจริง
หัวข้อที่มีชื่อว่า “ตัวที่คุณใช้งานจริง”200 OK— สำเร็จพร้อม body201 Created— มีการสร้าง resource ขึ้น; ใส่ headerLocationไปด้วย204 No Content— สำเร็จ ไม่มีอะไรต้องส่งกลับ (เช่นDELETE)400 Bad Request— request ผิดรูปแบบ (JSON เสีย, ขาดส่วนที่จำเป็น)401 Unauthorized— ไม่มี/credential ไม่ถูกต้อง; client ต้อง authenticate403 Forbidden— authenticate แล้ว แต่ไม่มีสิทธิ์404 Not Found— ไม่มี resource ดังกล่าว409 Conflict— request ขัดแย้งกับสถานะปัจจุบัน (ซ้ำ, version ชนกัน)422 Unprocessable Entity— ถูกต้องตาม syntax แต่ผิดความหมาย (validation ไม่ผ่าน)429 Too Many Requests— ถูกจำกัด rate500 Internal Server Error/503 Service Unavailable— server ล้มเหลว
กรณีใกล้เคียงกัน
หัวข้อที่มีชื่อว่า “กรณีใกล้เคียงกัน”- 200 vs 201 vs 204 — ส่ง body กลับ →
200; สร้าง resource →201; ไม่มีอะไรจะบอก →204 - 400 vs 422 — server แม้แต่ parse request ได้หรือไม่? parse ไม่ได้ →
400; parse ได้ดีแต่ค่าไม่ถูกต้อง →422 - 401 vs 403 — เรารู้หรือไม่ว่าคุณเป็นใคร? ยังไม่ได้ authenticate →
401; authenticate แล้วแต่ไม่ได้รับอนุญาต →403 - 404 vs 409 — ไม่มี resource นั้นอยู่ →
404; มีอยู่แต่ request ขัดแย้งกับสถานะปัจจุบันของ resource →409
Code ใน API ที่กำลังทำงาน
หัวข้อที่มีชื่อว่า “Code ใน API ที่กำลังทำงาน”| Status Range | ความหมาย | ตัวอย่าง |
|---|---|---|
| 2xx | สำเร็จ | 200 OK, 201 Created, 204 No Content |
| 3xx | Redirect | 301 Moved, 304 Not Modified |
| 4xx | Client error | 400 Bad Request, 401, 403, 404, 409, 422, 429 |
| 5xx | Server error | 500 Internal, 503 Service Unavailable |
ข้อผิดพลาดที่พบบ่อย
หัวข้อที่มีชื่อว่า “ข้อผิดพลาดที่พบบ่อย”Return 200 พร้อม Error ใน Body อาการ:
HTTP 200 OKพร้อม{ "success": false, "error": "Not found" }- monitoring ที่ดู HTTP status คิดว่า request สำเร็จ
- alert และ SLA measurement ผิดพลาด
- ใช้ status code ที่ถูกต้อง: 404 ไม่ใช่ 200
ใช้ 500 สำหรับ Client Error อาการ:
- validation ผิด → server throw exception → return 500
- client ไม่รู้ว่า request ของตัวเองผิด หรือ server มีปัญหา
- ต้อง catch validation error ก่อน → return 400 หรือ 422
💡 ตัวอย่างจากของจริง
GitHub API:
- 422 Unprocessable Entity สำหรับ validation error — field ผิด rule
- 409 Conflict สำหรับ duplicate resource
- 403 Forbidden สำหรับ action ที่ไม่มีสิทธิ์ (ต่างจาก 401 ที่ยังไม่ authenticate)
Stripe API:
- status code ครบ: 400 invalid request, 401 auth failed, 402 payment failed, 429 rate limit
- HTTP status code map ตรงกับ error type เสมอ