2010-06-25 39 views
8

Chúng tôi đang ở giữa một cuộc thảo luận đang diễn ra về cách xử lý các ngoại lệ REST.Làm cách nào để xử lý các ngoại lệ REST?

đáp ứng Content type: JSON

Hai giải pháp chúng ta có:

  1. Ném tất cả các trường hợp ngoại lệ được kiểm soát như một phản ứng JSON.
  2. Gửi yêu cầu Mã phản hồi không hợp lệ.

Arguments:

  • Khi nó một lỗi, tại sao trở về JSON? Chỉ cần gửi mã phản hồi không hợp lệ.

Counter Đối số:

  • mã phản hồi là quá kỹ thuật để xử lý đối với các nhà phát triển bình thường.

Bạn nói gì ??

+0

Tôi tự hỏi tại sao mã phản hồi quá kỹ thuật. Nếu bạn phải/có thể thực hiện bất kỳ hành động khắc phục nào, bạn phải phụ thuộc vào mã phản hồi (hoặc bất kỳ mã lỗi nào khác bên trong json) và không phải trên chuỗi lỗi có thể đọc được của người dùng –

+0

Chúng tôi xử lý tất cả các loại máy khách. Vì vậy, chúng tôi không muốn giả định rằng các nhà phát triển với khách hàng đủ thông thạo để hiểu mã phản hồi. Đó là vài suy nghĩ của mọi người và của tôi nữa. Nếu họ nhìn vào json họ có thể hiểu được lỗi. –

+0

Một trong những ưu điểm chính của REST là tính đồng nhất của các giao diện. Vì vậy, khi bạn nói rằng chúng ta có một REST api, máy khách sẽ tự động dự đoán danh sách các tài nguyên và các hoạt động GET PUT POST DELETE và tương tự như vậy, anh ta biết về các mã lỗi mà anh ta có thể tưởng tượng. Chuỗi lỗi chắc chắn sẽ hữu ích cho khách hàng của bạn (nhà phát triển) để gỡ lỗi. Nhưng mã họ viết chống lại api của bạn * nên * thực hiện hành động dựa trên mã và không phải là chuỗi. –

Trả lời

13

Đối với API JSON tôi mới phát triển, tôi làm cả hai. Tôi luôn luôn trả lời với JSON hợp lệ (tốt, giả sử tôi trả lời ở tất cả). Nếu tôi phát hiện một yêu cầu không hợp lệ, tôi sử dụng trạng thái 400. Nếu tôi phát hiện lỗi máy chủ (mà tôi không tin là do yêu cầu không hợp lệ), tôi sử dụng trạng thái 5xx. Đối tượng JSON chứa một khóa đặc biệt chỉ được đặt cho các lỗi, với một giá trị chuỗi.

Tôi nghĩ đây là giải pháp tốt tôn trọng các nguyên tắc REST và có thể được sử dụng theo nhiều cách. Cùng một giải pháp được sử dụng bởi một số API JSON khác, chẳng hạn như Yahoo Search. Hãy thử http://search.yahooapis.com/ImageSearchService/V1/imageSearch?appid=YahooDemo&output=json.

+1

+1: Với việc sử dụng RESTful của HTTP, bạn hoàn toàn phải tận dụng các mã phản hồi HTTP.Thông tin bổ sung có thể được trả về trong biểu diễn. –

+0

Tôi vừa thấy câu trả lời này trong các mục "Liên quan" của SO. Và mặc dù câu trả lời cũ của nó rõ ràng vẫn hiển thị. Tôi tin rằng có một * nhiều * nhiều hơn để xử lý lỗi tốt hơn là chỉ đơn giản bằng cách sử dụng mã trạng thái HTTP (đó là một khởi đầu tốt mặc dù!). Xem http://soabits.blogspot.dk/2013/05/error-handling-considerations-and-best.html để có một cuộc thảo luận chuyên sâu. –

5

Sử dụng các mã lỗi như cho HTTP. Vì vậy, 50 * cho bất kỳ nguyên nhân ngoại lệ bởi một số vấn đề nội bộ. Và 40 * cho các đối số xấu. Tránh sử dụng mã được xác định của riêng bạn càng nhiều càng tốt. Ý tưởng là để có một giao diện "thống nhất".

Nói chung. 204 để thành công mà không cần gửi bất kỳ nội dung nào 200 để thành công với biểu diễn json của tài nguyên Và nếu hoạt động không thành công của nó trả lại mã phản hồi thích hợp. Bạn có thể chọn tùy chọn trả lại một json. Để đơn giản hóa mọi thứ, bạn có thể có một định dạng chung (json) cho tất cả các phản hồi lỗi.

http://en.wikipedia.org/wiki/REST là phải đọc trước khi bạn cố định thông số kỹ thuật api của mình.

+0

"201 để thành công mà không gửi bất kỳ nội dung nào". 201 được tạo ra, vì vậy nó chỉ nên được sử dụng khi "một tài nguyên mới [được tạo]", không phải cho sự thành công chung. Bạn có thể nghĩ đến 204, "Không có nội dung" –

+0

oops! đúng. Cảm ơn vì sự đúng đắn của bạn! –