2011-02-22 4 views
18

Xem xét trường hợp đơn giản khi người dùng đang xóa bài đăng. Đây là yêu cầu HTTP DELETE/POST đơn giản với một trường bắt buộc, post_id.Mã phản hồi HTTP thích hợp cho yêu cầu không có trường bắt buộc

Máy chủ nên làm gì nếu post_id không được cung cấp?

Rõ ràng, người dùng sẽ không bao giờ gặp phải hành vi này, vì vậy hãy trở nên tinh khiết.

lần quay đầu tiên của tôi sẽ là 400 yêu cầu xấu, nhưng spec nói

The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications. 

và tôi muốn nói rằng lĩnh vực còn thiếu là OK từ cú pháp/http POV, đó là ứng dụng tên miền cụ thể yêu cầu ngữ nghĩa.

200 OK với giải thích là xấu, 500 cảm thấy kỳ lạ vì đây là vấn đề yêu cầu.

Mặc dù?

+1

có thể trùng lặp với [Mã phản hồi trạng thái HTTP nào tôi nên sử dụng nếu yêu cầu thiếu thông số bắt buộc?] (http://stackoverflow.com/questions/3050518/what-http-status-response-code-should-i-use-if-the-request-is-missing-a-required) – Lucero

Trả lời

29

400 là câu trả lời chính xác.

400 không bị giới hạn đối với cú pháp không đúng định dạng từ điểm nhìn HTTP. Thiếu đối số bắt buộc là một lỗi trong cú pháp định nghĩa bởi ứng dụng và do đó một "Bad Request"

EDIT

Lúc đầu nó có vẻ lạ mà không có mã khai riêng cho điều này, nhưng sự trở lại mã được thiết kế để phân biệt những hành động mà khách hàng nên thực hiện. Mã lỗi 400 có nghĩa là máy khách sẽ thay đổi dữ liệu POST hoặc chuỗi truy vấn thành định dạng do ứng dụng xác định. Do đó nó là thích hợp cho trường hợp này.

+0

Đây là danh sách Mã phản hồi RESTful cũng như một số thông tin khác về các phương pháp hay nhất cho REST: http://goo.gl/Nf9gt –

1

Trong trường hợp REST, tài nguyên cần xóa phải được xác định bằng URL, vì vậy ID của tài nguyên phải là một phần của URL đó để xác định đúng. Khi giả định đó là chính xác, thì URL hoặc là xác định một tài nguyên khác nhau fr xóa, hoặc nó không phải là (mà sẽ cung cấp cho một 404)

Trong trường hợp chung của một tham số còn thiếu, tuy nhiên, tôi thường sử dụng 403 Lỗi bị cấm. Lý do là yêu cầu được hiểu, nhưng tôi sẽ không làm như được hỏi (bởi vì mọi thứ đều sai). Thực thể phản hồi giải thích những gì là sai, vì vậy nếu phản hồi là một trang HTML, các thông báo lỗi nằm trong trang. Nếu đó là một phản ứng JSON hoặc XML, thông tin lỗi có trong đó.

Từ rfc2616:

10.4.4 403 Forbidden

Máy chủ hiểu yêu cầu, nhưng từ chối đáp ứng nó.
Ủy quyền sẽ không giúp và yêu cầu KHÔNG được lặp lại.
Nếu phương thức yêu cầu không phải là HEAD và máy chủ muốn thực hiện
công khai tại sao yêu cầu không được đáp ứng, nó NÊN mô tả lý do cho việc từ chối trong thực thể. Nếu máy chủ không muốn cung cấp thông tin này cho khách hàng, thay vào đó, mã trạng thái 404
(Không tìm thấy) có thể được sử dụng.