2012-03-07 30 views
14

Kịch bản:cho "không có sẵn dữ liệu" từ một nguồn dữ liệu bên ngoài

Yêu cầu POST được gửi đến xử lý đơn đặt mà sẽ dẫn đến thu hồi dữ liệu từ một nguồn dữ liệu bên ngoài.

Có ba kết quả có thể:

  1. Các nguồn dữ liệu trở lại dữ liệu cho yêu cầu
  2. Không có dữ liệu đã sẵn sàng cho các yêu cầu (điều này được xem như một lỗi)
  3. Các nguồn dữ liệu không thể được truy cập (có thể xuống để bảo trì)

Một phản ứng rõ ràng cho là 200: OK hay 201: Created (một thực thể được tạo ra từ yêu cầu này).

Mã trạng thái nào thích hợp cho và ?

mã Status Tôi đã xem xét:

  • 503: Service Unavailable khi nguồn dữ liệu là xuống
  • 500: Internal Server Error khi nguồn dữ liệu là xuống
  • 502: Bad Gateway khi "không có sẵn dữ liệu"
  • 404: Not Found khi "có sẵn không có dữ liệu"
  • 403: Forbidden khi "không có sẵn dữ liệu"
  • 412: Precondition Failed khi "không có sẵn dữ liệu"
+0

Bạn đang cố gắng truy vấn dữ liệu bằng cách sử dụng yêu cầu POST? Bạn có nên sử dụng phương thức GET không? –

+2

'GET' không phù hợp vì các truy vấn dữ liệu này không an toàn cũng không phải là không có giá trị (chúng có thể dẫn đến việc trao đổi tiền giữa các thứ khác). –

Trả lời

8

2) Nhìn lại này, tôi đồng ý nó có lẽ nên được hoặc là một 204 Không có nội dung hoặc có thể là một 200 với nội dung cho thấy không có hồ sơ hoặc tài nguyên có thể được tìm thấy tùy thuộc vào cấu trúc trả về. 404 thường được sử dụng khi tài nguyên URI không tồn tại hoặc tài nguyên trong URI không được tìm thấy trong trường hợp của một dịch vụ an toàn.

3) 503 Service Unavailable

Máy chủ hiện không có khả năng xử lý các yêu cầu do quá tải tạm thời hoặc bảo trì của máy chủ. Ý nghĩa là đây là một tình trạng tạm thời sẽ được giảm bớt sau một thời gian trễ. Nếu biết, độ dài của sự chậm trễ CÓ THỂ được chỉ ra trong một tiêu đề Retry-After. Nếu không có Retry-After, client sẽ NÊN xử lý đáp ứng vì nó sẽ trả lời 500.

Note: The existence of the 503 status code does not imply that a 
    server must use it when becoming overloaded. Some servers may wish 
    to simply refuse the connection. 
+1

Nếu yêu cầu được máy chủ chấp nhận tại tài nguyên này, nhưng không có dữ liệu nào có sẵn để trả lại - thì 404 có ý nghĩa rất ít. Thật không may, tôi không nghĩ rằng có một mã trạng thái rõ ràng có ý nghĩa ở đây, nhưng tôi có xu hướng nghiêng về phía câu trả lời của 204 (hoặc thậm chí có thể là 200 với một cơ thể cho biết "Không có dữ liệu"). – MandM

+0

204 chắc chắn là sai nếu yêu cầu http được coi là lỗi. – Evert

+0

Phụ thuộc vào những gì được coi là một thất bại có nghĩa là nếu bạn đang tìm kiếm một cái gì đó và không có kết quả được trả lại một 204 có thể được chấp nhận. OP thực sự không cung cấp đủ chi tiết cho một câu trả lời dứt khoát. Tất cả những gì chúng tôi thực sự phải thực hiện là 'Không có dữ liệu nào có sẵn cho yêu cầu', trường hợp của một vấn đề liên quan đến nguồn dữ liệu được xử lý riêng biệt, vì vậy tất cả những gì thực sự rời đi là ai đó đang yêu cầu dữ liệu không tồn tại, không thực sự có vẻ giống như một điều kiện lỗi vì vậy phạm vi 2xx dường như hợp lý. – Dan675

22

3) Tôi đồng ý với 503 cho

2 này) Thành thật mà nói tôi nghĩ rằng một cuộc tranh luận tốt có thể được thực hiện cho bằng 204 trong trường hợp 2 Bạn có thể bao gồm metainfo trong tiêu đề để chỉ ra cụ thể những gì 'đã đi sai '. Nó thực sự phụ thuộc vào số tiền bạn coi trường hợp này là 'một lỗi' ở cấp API.

Nếu chính API hoạt động như dự định và yêu cầu đến điểm cuối hợp lệ, bởi người dùng đã được xác thực và được ủy quyền và không gây ra sự cố cho máy chủ thì rất ít trong số 400 hoặc 500 lỗi thực sự có vẻ để áp dụng.

ví dụ, 404 thường có nghĩa là URI bạn gọi là không tồn tại, nếu nó tồn tại, sau đó sử dụng mã được gây hiểu lầm ít nhất IMHO

**10.2.5 204 No Content** 

Các máy chủ đã hoàn thành yêu cầu nhưng không cần phải trả về một cơ quan thực thể và có thể muốn trả lại thông tin đã được cập nhật. Câu trả lời CÓ THỂ bao gồm các biến thể mới hoặc được cập nhật dưới dạng các tiêu đề thực thể, trong đó nếu hiện tại NÊN được liên kết với biến thể được yêu cầu.

Nếu khách hàng là đại lý người dùng, KHÔNG NÊN thay đổi chế độ xem tài liệu từ đó đã khiến yêu cầu được gửi đi. Câu trả lời này là chủ yếu nhằm cho phép đầu vào cho các hành động diễn ra mà không cần gây ra thay đổi đối với chế độ xem tài liệu hiện hoạt của tác nhân người dùng, mặc dù bất kỳ thông tin mới hoặc được cập nhật nào NÊN được áp dụng cho tài liệu hiện đang ở chế độ xem đang kích hoạt của tác nhân người dùng.

Phản hồi 204 KHÔNG PHẢI bao gồm nội dung thư, và do đó luôn là bị chấm dứt bởi dòng trống đầu tiên sau trường tiêu đề.

+4

Một cách "phổ biến" khác dường như được xử lý, bằng cách trả về một thông báo lỗi hoặc phản hồi trống với mã trạng thái HTTP 200. Điều này cũng đã được xúc động tại http://stackoverflow.com/questions/11402156/rest-status-code-204-on-paginated-result – Werner

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