Tôi đang làm việc với API REST nằm trên máy chủ xử lý dữ liệu cho vô số thiết bị IoT.
Nhiệm vụ của tôi là truy vấn máy chủ bằng API để thu thập thông tin hiệu suất cụ thể về các thiết bị đã nói.
Trong một trường hợp, tôi có được danh sách các thiết bị khả dụng và số nhận dạng tương ứng của chúng, sau đó truy vấn máy chủ để biết thêm chi tiết bằng cách sử dụng các số nhận dạng đó (GUID).
Máy chủ đang trả về 500 Internal Server Error
một truy vấn cho một trong những ID đó. Trong ứng dụng của tôi, một ngoại lệ được đưa ra và tôi không thấy chi tiết về lỗi. Nếu tôi kiểm tra phản hồi chặt chẽ hơn với Postman , tôi có thể thấy rằng máy chủ đã trả về JSON trong phần thân có chứa:
errorMessage: "This ID does not exist"
.
Bỏ qua thực tế là máy chủ đã cung cấp ID để bắt đầu - đó là một vấn đề riêng cho nhà phát triển.
API REST có nên trả về một 500 Internal Server Error
báo cáo rằng truy vấn tham chiếu đến một đối tượng không tồn tại không? Theo suy nghĩ của tôi, các mã phản hồi HTTP nên tham khảo đúng trạng thái của lệnh gọi REST, hơn là các cơ chế bên trong của API. Tôi mong đợi một 200 OK
phản hồi có chứa lỗi và mô tả, sẽ thuộc quyền sở hữu của API được đề cập.
Nó xảy ra với tôi rằng có một sự khác biệt tiềm năng trong kỳ vọng tùy thuộc vào cách gọi lệnh REST được cấu trúc.
Hãy xem xét các ví dụ sau:
http://example.com/restapi/deviceinfo?id=123
http://example.com/restapi/device/123/info
Trong trường hợp đầu tiên, ID thiết bị được truyền dưới dạng biến GET. 404 hoặc 500 sẽ chỉ ra rằng đường dẫn ( /restapi/deviceinfo
) không được tìm thấy hoặc dẫn đến lỗi máy chủ.
Trong trường hợp thứ hai, ID thiết bị là một phần của URL. Tôi sẽ hiểu nhiều hơn về a 404 Not Found
, nhưng vẫn có thể tranh luận dựa trên phần nào của đường dẫn được hiểu là các biến so với điểm cuối.