Đây là một câu hỏi lớn và vẫn có liên quan cao với bối cảnh lịch sử (và các định nghĩa dường như mâu thuẫn) của mã trả về HTTP. Ngay cả trong số các câu trả lời cho câu hỏi này có những định nghĩa mâu thuẫn. Điều này có thể được làm rõ bằng cách di chuyển theo thời gian.
RFC 2616 (tháng 6 năm 1999)
10.4.1 400 Yêu cầu xấu
Máy chủ không thể hiểu được yêu cầu do cú pháp không đúng. Khách hàng KHÔNG NÊN lặp lại yêu cầu mà không sửa đổi.
Kể từ RFC này, mã trạng thái này chỉ áp dụng cụ thể cho các yêu cầu không hợp lệ về mặt cú pháp. Có một khoảng cách trong mã trạng thái để xác nhận ngữ nghĩa. Do đó, khi RFC 4918 xuất hiện, một mã mới đã ra đời.
RFC 4918 (tháng 6 năm 2007)
11.2. Thực thể không thể xử lý 422
Mã trạng thái 422 (Thực thể không thể xử lý) có nghĩa là máy chủ hiểu loại nội dung của thực thể yêu cầu (do đó mã trạng thái 415 (Loại phương tiện không được hỗ trợ) là không phù hợp) và cú pháp của thực thể yêu cầu là chính xác (do đó là 400 (Yêu cầu sai ) mã trạng thái không phù hợp) nhưng không thể xử lý các hướng dẫn có trong đó. Ví dụ, điều kiện lỗi này có thể xảy ra nếu một thân yêu cầu XML chứa các hướng dẫn XML được định dạng đúng (nghĩa là đúng về mặt cú pháp), nhưng sai về mặt ngữ nghĩa, về mặt ngữ nghĩa.
Thực thể không thể xử lý được tạo ra để lấp đầy khoảng trống xác thực ngữ nghĩa trong đặc tả ban đầu của mã trạng thái 4xx. Tuy nhiên, một RFC khác có liên quan đã xuất hiện vào năm 2014, khái quát 400 đến không còn cụ thể theo cú pháp .
RFC 7231 (tháng 6 năm 2014, đã lỗi thời RFC 2616)
6.5.1. 400 yêu cầu xấu
Mã trạng thái 400 (Yêu cầu xấu) chỉ ra rằng máy chủ không thể hoặc sẽ không xử lý yêu cầu do lỗi được coi là lỗi máy khách (ví dụ: cú pháp yêu cầu không đúng định dạng, đóng khung thông báo yêu cầu không hợp lệ hoặc định tuyến yêu cầu lừa đảo).
Lưu ý rằng mô tả 422 nói rằng lý do 400 không phù hợp là vì 400 (kể từ RFC 2616) chỉ được trả về cho cú pháp yêu cầu xấu. Tuy nhiên, kể từ RFC 7231, định nghĩa lỗi cú pháp nghiêm ngặt không còn áp dụng cho 400 .
Quay trở lại câu hỏi: Trong khi 422 cụ thể hơn về mặt kỹ thuật, với bối cảnh này, tôi có thể thấy 400 hoặc 422 được sử dụng để xác thực ngữ nghĩa các tham số API. Tôi ngần ngại sử dụng 422 trong các API của riêng mình vì định nghĩa của 422 đã lỗi thời về mặt kỹ thuật tại thời điểm này (mặc dù tôi không biết nếu điều đó được công nhận chính thức ở bất cứ đâu). Bài viết được tham chiếu trong câu trả lời của Fran khuyến khích việc sử dụng 422 đã được viết vào năm 2012, hai năm trước khi RFC 7231 làm rõ HTTP 400. Chỉ cần đảm bảo tiêu chuẩn hóa cái này hay cái khác.