2013-03-09 26 views
7

Tôi đang viết một API Restful và tôi phải trả lại thông báo lỗi nhưng tôi không chắc chắn trên con đường nào để đi.Trạng thái HTTP có nên được sử dụng trong các câu trả lời lỗi khôi phục không?

Route 1 - HTTP Status

Sử dụng HTTP tình trạng lỗi khi khách hàng gửi dữ liệu xấu

Ex: 401 - Không được ủy quyền, 410 - Mô hình không tồn tại, 412 - Model Validaiton Lỗi, vv

Tuyến 2 - JSON thành công hay thất bại Lỗi

API trả về json và tôi đang xem xét trở lại tất cả mọi thứ với tiêu đề http 200, nhưng sau đó trong các lỗi xử lý JSON của tôi và thành công

Ví dụ: {"status": "error", "message": "Model validation error", "data": ["user name required" , "yêu cầu email của người dùng"]}

Tôi nên đi đường nào và tại sao? Ưu điểm và nhược điểm.

Trả lời

12

Tôi đang viết API an toàn và tôi phải trả lại thông báo lỗi nhưng tôi không chắc chắn về tuyến đường nào cần đi.

Route 1 - HTTP Status

Sử dụng HTTP tình trạng lỗi khi khách hàng gửi dữ liệu xấu

mã trạng thái HTTP nên hoàn toàn được sử dụng trong bất kỳ thực hiện dịch vụ web tự xưng là RESTful. Nguyên tắc cốt lõi của đặc tả là tận dụng và mở rộng Web để hỗ trợ hoàn toàn việc chuyển giao trạng thái đại diện. Để cho phép tương tác với cơ sở hạ tầng Web hiện tại, việc triển khai REST sẽ cho biết trạng thái của các yêu cầu thông qua các mã trạng thái HTTP thích hợp. Ví dụ:

200 - Ok
201 - Nội dung Created
401 - Unauthorized
403 - Forbidden
500 - Server Error
501 - Không thực hiện

Khi đáp ứng với nhiều các trạng thái , nó cũng được cho phép bởi đặc tả HTTP để bao gồm một biểu diễn thực thể trong phần thân phản hồi. Trong trường hợp các câu trả lời "không bình thường", không phải là lỗi, biểu diễn này thường sẽ là của thực thể đang được yêu cầu "vận hành" bởi yêu cầu HTTP. Trong trường hợp lỗi phản hồi biểu diễn, nếu có, nên cung cấp thêm thông tin về lỗi xảy ra. Đây là nơi chúng tôi phân biệt tùy chọn của bạn 2.

Tuyến 2 - JSON thành công hay Lỗi Không

API trả về json và tôi đang xem xét trở lại tất cả mọi thứ với header http 200, nhưng sau đó trong các lỗi JSON xử lý của tôi và thành công

Bạn hoàn toàn không trả lại 200 OK cho tất cả các câu trả lời. Nhiều các máy khách HTTP được triển khai tốt phụ thuộc vào mã trạng thái trong phản hồi để xác định thời điểm nó thành công hay không. Luôn trả lời bằng 200 OK có thể khiến thư viện máy khách bên thứ ba xử lý không chính xác dữ liệu đến và cũng yêu cầu khách hàng của bạn phân tích cú pháp nội dung phản hồi để xác định xem có lỗi xảy ra hay không.

Có nói rằng, việc thêm thông tin bổ sung về lỗi xảy ra có thể rất hữu ích, vì vậy, hãy cân nhắc việc thêm nó vào nội dung phản hồi. Định dạng được đề xuất của bạn trông tốt, mặc dù thành thật mà nói, yếu tố status là thừa, giả sử bạn sử dụng mã trạng thái HTTP một cách thích hợp. Một cái gì đó giống như:

{ 
    "message": "Model validation error", 
    "data": [ 
     "user name required", 
     "user email required" 
    ] 
} 
Các vấn đề liên quan