Я працюю з API REST, який знаходиться на сервері, який обробляє дані для безлічі пристроїв IoT.
Моє завдання - запросити сервер за допомогою API для збору конкретної інформації про продуктивність цих пристроїв.
В одному випадку я отримую список доступних пристроїв та їх відповідних ідентифікаторів, а потім пізніше запитую сервер для отримання більш детальної інформації за допомогою цих ідентифікаторів (GUID).
Сервер повертає 500 Internal Server Error
запит на один з цих ідентифікаторів. У моїй заявці видається виняток, і я не бачу деталей про помилку. Якщо я більш детально вивчу відповідь з Postman , я можу побачити, що сервер повернув JSON в тіло, яке містить:
errorMessage: "This ID does not exist"
.
Нехтуйте тим, що сервер надав ідентифікатор для початку - це окрема проблема для розробника.
Чи повинен REST API повертати а, 500 Internal Server Error
щоб повідомити, що запит посилається на об'єкт, який не існує? На мій погляд, коди відповідей HTTP повинні суворо ставитися до статусу виклику REST, а не до внутрішньої механіки API. Я б очікував, 200 OK
що відповідь, що містить помилку та опис, буде власником відповідного API.
Мені здається, що існує різниця потенціалів у очікуванні залежно від структури REST-дзвінка.
Розглянемо наступні приклади:
http://example.com/restapi/deviceinfo?id=123
http://example.com/restapi/device/123/info
У першому випадку ідентифікатор пристрою передається у вигляді змінної GET. 404 або 500 означатиме, що шлях ( /restapi/deviceinfo
) або не знайдений, або призвів до помилки сервера.
У другому випадку ідентифікатор пристрою є частиною URL-адреси. Я б більше розумів 404 Not Found
, але все ж можу стверджувати, виходячи з того, які частини шляху трактуються як змінні проти кінцевих точок.