2011-01-04 17 views
15

Tôi muốn phân biệt giữa các loại lỗi "Không tìm thấy" riêng biệt. Ví dụ cho các yêu cầu sau đây:Tôi có thể sử dụng các lý do tùy chỉnh cho mã trạng thái HTTP để phân biệt giữa các lỗi cho REST API

GET /author/Adams/works/HHGTTG

Hoặc là tác giả có thể 'không tìm thấy' hoặc công việc có thể tìm thấy be'not' và tôi muốn phân biệt giữa hai người.

status: 404 - tác giả không tìm thấy
status: 404 - làm việc không tìm thấy

Theo spec cụm từ lý do có thể được thay đổi. http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html

6.1.1 Tình trạng Mã và Lý do cụm từ

... Các cụm từ lý do được liệt kê ở đây là chỉ khuyến nghị - họ có thể được thay thế bằng tương đương địa phương mà không ảnh hưởng đến giao thức ...

Bạn cũng có thể sử dụng hai cụm từ duy nhất cho cùng một mã trạng thái không?

Và, đây có phải là cách tiếp cận âm thanh hoặc có quy ước tốt hơn để chỉ ra các lỗi chi tiết hơn không?

Cuối cùng tôi muốn có thư viện khách hàng có thể ném ngoại lệ AuthorNotFound hoặc WorkNotFound thay vì ngoại lệ AuthorOrWorkNotFound chung.

Trả lời

4

Khi sử dụng "shadowed" không tìm thấy cách tiếp cận của bạn, bạn có thể làm sử dụng 404 với cơ thể phản ứng:

  • sử dụng 404 tình trạng với các chi tiết văn bản ('tác giả không tìm thấy', 'công việc không tìm thấy'). Để linh hoạt hơn về ngôn ngữ, bạn có thể sử dụng nhãn (như error.author.notFound)
  • sử dụng cấu trúc và phân tích cú pháp "mã con" dễ dàng hơn nhiều (ví dụ: 10 viết tắt của tác giả không tìm thấy, 11 người dùng không tìm thấy).

Tuy nhiên, tôi KHÔNG đề xuất các mã phụ được đề cập ở trên, chúng thêm nhiều nỗ lực phức tạp và bảo trì cho giao diện HTTP thống nhất. Cấu trúc thư viện api-client của bạn khác nhau. Hãy để nó gọi /author/adams/work/11 trước. Nếu nó trả về 404 thì hãy gọi /author/adams/ bên cạnh để tìm hiểu xem đó có phải là tác giả bị thiếu gây ra 404. Sau đó, bạn có thể ném các ngoại lệ NotFound tương ứng.

Một giải pháp thay thế khác là thiết kế ứng dụng api-client cuối khác nhau. Đầu tiên, hãy gọi /author/adams nếu không 404 sẽ tiến hành /author/adams/work. Vì vậy, tự nhiên bản thân ứng dụng đang giảm dần con đường. Nhưng điều này tất nhiên chỉ hoạt động nếu luồng trang của bạn bên trong giao diện người dùng thích ứng với chuỗi cuộc gọi này.

+0

Điều này khiến tôi suy nghĩ, để sử dụng tính năng dịch 404 không được tìm thấy thành một số – Ben

+0

[nhận xét trước đó đã bị cắt xén] Điều này khiến tôi suy nghĩ về trường hợp sử dụng 404 không được tìm thấy trong WorkNotFound nếu lý do thực sự là vì không có tác giả. Nếu tôi yêu cầu/tác giả/adams/và nhận được 404 luôn được dịch sang WorkNotFound và 404 cho/author/adams/work/HHGTTG ​​sẽ luôn dịch 404 sang WorkNotFound. Phía máy khách, tôi có thể dễ dàng xác định nguyên nhân gốc của WorkNotFound là AuthorNotFound hay không bằng cách tìm kiếm tác giả trực tiếp. Cảm ơn những lời khuyên hữu ích. – Ben

7

Bạn có thể có phần thân của phản hồi HTTP chứa thông báo mà bạn có thể phân tích cú pháp với bất kỳ thông tin bổ sung nào.

Thông báo trạng thái HTTP trên mã trạng thái (trong phản hồi) có thể là bất kỳ thứ gì bạn muốn và nó sẽ không ảnh hưởng đến bất kỳ khách hàng nào. Các máy khách HTTP thường bỏ qua văn bản tin nhắn.

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