2012-05-24 42 views
20

Vì vậy, tôi đang phát triển một API RestHttp Mã trạng thái 400 và 412

Khi POST được tạo để tạo tài nguyên và trường bắt buộc bị thiếu những gì tôi nên quay trở lại?

400 - Bad Request

HOẶC

412 - kiện tiên quyết Không

Và Tại sao?

Trả lời

28

Sử dụng 400 nếu yêu cầu thông số sai. Sử dụng 412 nếu một trong các yêu cầu If-* yêu cầu tiêu đề như If-Match, If-Modified-Since, v.v.

Tại sao? Đó chỉ là những gì RFC nói. Xem ví dụ chiết xuất này của If-Match đặc điểm kỹ thuật:

Nếu không có trận đấu thẻ thực thể, hoặc nếu "*" được đưa ra và không có thực thể hiện tại tồn tại, máy chủ PHẢI KHÔNG thực hiện các phương pháp yêu cầu, và PHẢI trả về một 412 (Điều kiện tiên quyết thất bại) phản ứng. Hành vi này là hữu ích nhất khi khách hàng muốn ngăn chặn một phương pháp cập nhật, chẳng hạn như PUT, từ sửa đổi một tài nguyên đã thay đổi kể từ khi khách hàng cuối cùng lấy nó.

+1

Nó cũng cho biết yêu cầu không thể thực hiện được do cú pháp không đúng định dạng cho 400. – Rob

+1

Trang này thực sự đã giúp tôi - http://odino.org/don-t-rape-http-if-none-match-the- 412-http-status-code/- Sử dụng các yêu cầu 'PUT' cho ngữ cảnh giúp tôi dễ hiểu hơn về điều đó vì nó luôn dễ dàng lạm dụng các mã trạng thái nhất định. – Charlie

12

412 được sử dụng khi máy chủ của bạn không đáp ứng điều kiện do khách hàng chỉ định.

Trong trường hợp của bạn, bạn nên sử dụng 400. Đây chỉ là một yêu cầu không hợp lệ.

Xem phần này link để biết cách giải thích về các tiêu đề tiền điều kiện.

Đầu đề Etag thường là một chuỗi đại diện cho tài nguyên của chúng tôi trong tiêu đề HTTP. Bạn yêu cầu tài nguyên có If-Match là tiêu đề HTTP điều kiện tiên quyết . Nó sẽ gửi 412 nếu nó không khớp với mã bạn đã gửi.

If-None-Match yêu cầu máy chủ xử lý toàn bộ phản hồi chỉ khi Etag khác với thông báo được khách hàng gửi.

+0

Tại sao lại là downvote? có gì sai với câu trả lời? – nunespascal

+4

Hãy nghĩ ai đó đã có một ngày tồi tệ. Chỉ cần bỏ qua nó và để cho hệ thống làm công việc của mình :) – BalusC

+0

Có một upvote để cân bằng nó ra. –

3

Bạn có thể sử dụng mã trạng thái 422. Nếu bạn không muốn, 400 là tốt.

Các vấn đề liên quan