2013-02-21 42 views
5

API RESTFul của tôi chỉ có thể đáp ứng dữ liệu được mã hóa JSON (tức là tất cả các tiêu đề của tôi có Content-Type: application/json). Tôi nên trả lại gì nếu yêu cầu có tiêu đề Accept không cho phép JSON (ví dụ: Accept: text/html)? Tôi có nên trả lại một số 400 Bad Request với lời giải thích trong cơ thể hoặc có mã trạng thái cụ thể hơn cho ngoại lệ này không?Phản hồi HTTP cho tiêu đề Chấp nhận không được chấp nhận

Lưu ý rằng điều này khác với unsupported request content-types.

Trả lời

3

Đừng bận tâm.

Sẽ có các trường hợp mà theo đó người tiêu dùng dịch vụ của bạn sẽ không bận tâm đặt tiêu đề này, ví dụ: khi sử dụng cURL hoặc file_get_contents() bằng PHP.

Nếu tài liệu API của bạn tuyên bố rằng dịch vụ của bạn chỉ hỗ trợ đầu ra JSON, điều đó sẽ đủ tốt.

Bạn cũng có thể làm việc với các tiện ích để thực thi định dạng, ví dụ: /path/to/resource.json?a=b hoặc /path/to/resource.xml?a=b cho JSON và XML tương ứng.

Trong trường hợp bạn muốn hỗ trợ nhiều định dạng đầu ra và giá trị tiêu đề yêu cầu Accept không kết luận, bạn nên xác định định dạng đầu ra mặc định.

+1

Vì vậy, bạn nói chỉ trả về phản hồi thông thường với 'Content-Type: application/json'? –

+1

@AttilaO. Khẳng định :) –

+0

Ok, đủ đơn giản. Bạn sẽ làm gì, mặt khác, nếu API sẽ hỗ trợ cả JSON và một cái gì đó khác, hãy nói Bencode ('application/x-bencode'), nhưng yêu cầu được chỉ định thứ ba, nói,' Accept: text/xml'? (Tôi biết điều này không phải là một phần của câu hỏi ban đầu của tôi.) –

9

Nếu bạn muốn được ngữ nghĩa chính xác:

Nếu yêu cầu là HTTP/1.0:

một 406 Không được chấp nhận là điều đúng để trở về, như khách hàng có thể không có khả năng xử lý một phản ứng không phải loại được yêu cầu.

trong HTTP/1.1, đó vẫn là "quyền" điều cần làm, nhưng có những trường hợp ngoại lệ,

Từ RFC 2616 Sec 10.4.7

Note: HTTP/1.1 servers are allowed to return responses which are 
     not acceptable according to the accept headers sent in the 
     request. In some cases, this may even be preferable to sending a 
     406 response. User agents are encouraged to inspect the headers of 
     an incoming response to determine if it is acceptable. 

Thật ra, khả năng của nó mattering là khá thấp, như @Jack đã đề cập. Tôi chỉ bao gồm câu trả lời này vì lợi ích của sự hoàn chỉnh.

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