2008-11-12 44 views
11

Chúng tôi có một API REST mà khách hàng thường xuyên gửi dữ liệu POST và PUT đến. Khi họ làm điều này, đôi khi họ POST dữ liệu mà kết quả là không có thay đổi trên hệ thống của chúng tôi. POST và PUT được định dạng tốt, nhưng dữ liệu mà chúng đang gửi giống hệt với dữ liệu trong cơ sở dữ liệu của chúng tôi. Khi điều này xảy ra, tôi vừa phát hiện ra rằng chúng tôi đang trả lại trạng thái HTTP 400. Thật không may, điều này có nghĩa là "yêu cầu xấu" như trong "yêu cầu không thể được hiểu bởi máy chủ do cú pháp không đúng định dạng".REST: Mã phản hồi HTTP đúng cho một bài đăng bị bỏ qua

Rõ ràng đây không phải là trường hợp, nhưng tôi được thông báo rằng chúng tôi sẽ sử dụng điều này vì không có mã trạng thái thích hợp khác. Các lựa chọn mà chúng tôi đã xem xét:

  • 304 Không được sửa đổi. Điều này, đáng tiếc, chỉ dành cho các yêu cầu GET.
  • 204 Không có nội dung. Có vẻ gần, nhưng cấm một thực thể-cơ thể.

Các lựa chọn khác có vẻ không kém phần xấu. Chúng ta có thể đi với 200 OK và có các thông tin liên quan trong tài liệu XML mà chúng ta quay trở lại, nhưng điều này dường như không được "RESTish". Thế giới REST thường xử lý việc này như thế nào?

(cố định không thay đổi mã phản hồi. Cảm ơn Mkoeller)

+0

Trạng thái HTTP 302 được đặt tên là "Đã tìm thấy". – mkoeller

Trả lời

17

Tôi nghĩ hoàn toàn ổn khi trả lại 200 OK trong trường hợp đó, dữ liệu đã được xử lý chính xác và máy chủ đã làm những gì cần thiết. Vì máy chủ xử lý chính xác dữ liệu nên máy chủ phải trả lại mã trạng thái OK. Thực tế là nó bỏ qua nó trong nội bộ là hoặc nên không liên quan.

Máy chủ đã làm gì với dữ liệu không được thông báo cho khách hàng, họ cần được thông báo về những gì đã xảy ra với yêu cầu (xử lý ok, xảy ra lỗi và tương tự).

Và nếu vì một lý do lạ lùng nào đó (tôi không thể nghĩ một lý do hợp lệ, btw), nó là sự quan tâm đối với khách hàng, bạn có phản hồi để nói với họ như vậy.

1

Từ khách hàng xem trạng thái máy chủ là như nhau nếu nội dung yêu cầu là như nhau trên máy chủ hay không, phải không? Kể từ khi máy chủ sau đó giữ excactly nội dung đã được gửi, tại sao máy chủ nên đáp ứng với bất kỳ loại trạng thái lỗi? Mặt khác, tại sao khách hàng nên bận tâm nếu nội dung yêu cầu giống với nội dung đã được máy chủ biết đến? Nó đã được chuyển thành công tới máy chủ nên phần lớn công việc được thực hiện. Khách hàng sẽ phản ứng như thế nào nếu có mã phản hồi khác cho tình huống này?

Kết luận: Tình huống của bạn về nội dung yêu cầu bằng nội dung hiện có không có trường hợp đặc biệt. Bạn nên trả lời cùng mã trạng thái phản hồi. Đó có thể là 200, 302 hoặc 303.

2

Nếu khách hàng có thể biết thẻ thực thể cho nội dung trên máy chủ trước khi họ PUT, thì sử dụng tiêu đề If-Match và câu trả lời 412 Điều kiện tiên quyết không tồn tại cho chính xác tình huống bạn mô tả.

+0

Ý của bạn là 'If-None-Match' –

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