Pracuję z interfejsem API REST, który znajduje się na serwerze, który obsługuje dane dla wielu urządzeń IoT.
Moim zadaniem jest wysłanie zapytania do serwera za pomocą interfejsu API w celu zebrania określonych informacji o wydajności tych urządzeń.
W jednym przypadku uzyskuję listę dostępnych urządzeń i odpowiadających im identyfikatorów, a następnie pytam serwer o więcej szczegółów przy użyciu tych identyfikatorów (GUID).
Serwer zwraca 500 Internal Server Error
zapytanie dotyczące jednego z tych identyfikatorów. W mojej aplikacji zgłaszany jest wyjątek i nie widzę szczegółów dotyczących błędu. Jeśli przyjrzę się dokładniej odpowiedzi Postmana , widzę, że serwer zwrócił JSON w treści zawierającej:
errorMessage: "This ID does not exist"
.
Pomiń fakt, że serwer podał identyfikator na początek - to osobny problem dla programisty.
Czy interfejs API REST powinien zwrócić a, 500 Internal Server Error
aby zgłosić, że zapytanie odwołuje się do obiektu, który nie istnieje? Moim zdaniem kody odpowiedzi HTTP powinny odnosić się ściśle do statusu wywołania REST, a nie do wewnętrznej mechaniki API. Spodziewałbym się 200 OK
odpowiedzi zawierającej błąd i opis, która byłaby zastrzeżona dla danego interfejsu API.
Przyszło mi do głowy, że istnieje potencjalna różnica w oczekiwaniu w zależności od struktury wywołania REST.
Rozważ te przykłady:
http://example.com/restapi/deviceinfo?id=123
http://example.com/restapi/device/123/info
W pierwszym przypadku identyfikator urządzenia jest przekazywany jako zmienna GET. Wartość 404 lub 500 wskazuje, że ścieżka ( /restapi/deviceinfo
) nie została znaleziona lub spowodowała błąd serwera.
W drugim przypadku identyfikator urządzenia jest częścią adresu URL. Lepiej zrozumiałbym a 404 Not Found
, ale nadal mogę argumentować na podstawie tego, które części ścieżki są interpretowane jako zmienne kontra punkty końcowe.