200
Фу ... (309, 400, 403, 409, 415, 422) ... багато відповідей, намагаючись вгадати, аргументувати та стандартизувати, що є найкращим кодом повернення для успішного запиту HTTP, але невдалого виклику REST .
Це неправильно змішувати HTTP коди статусу і коди стану спокою.
Однак я бачив, що багато реалізацій змішують їх, і багато розробників можуть не погодитися зі мною.
Коди повернення HTTP пов'язані з самим HTTP Request
собою. Виклик REST виконується за допомогою запиту протоколу передачі гіпертексту, і він працює на нижчому рівні, ніж викликається самим методом REST. REST - це концепція / підхід, а її результат - діловий / логічний результат, тоді як код результату HTTP - транспортний .
Наприклад, повернення "404 не знайдено" під час дзвінка / користувачів / плутає, бо це може означати:
- URI неправильний (HTTP)
- Користувачів не знайдено (REST)
"403 заборонено / заборонено доступ" може означати:
- Потрібен спеціальний дозвіл. Браузери можуть це впоратися, запитуючи користувача / пароль. (HTTP)
- Неправильні дозволи доступу, налаштовані на сервері. (HTTP)
- Вам потрібно пройти автентифікацію (REST)
І список може продовжуватися "500 помилками сервера" (помилка, кинута HTTP Apache / Nginx або помилка обмеження бізнесу в REST) або іншими помилками HTTP тощо ...
З коду важко зрозуміти, що було причиною відмови, помилкою HTTP (транспорту) або REST (логічним) збоєм.
Якщо запит HTTP фізично був виконаний успішно, він завжди повинен повертати 200 код, незалежно від того, знайдено чи ні запис. Оскільки ресурс URI знайдений та обробляється сервером HTTP. Так, він може повернути порожній набір. Чи можливо отримати порожню веб-сторінку з результатом 200 як HTTP, правда?
Замість цього ви можете повернути 200 HTTP-код з деякими параметрами:
- Об'єкт "помилка" в результаті JSON, якщо щось піде не так
- Порожній масив / об’єкт JSON, якщо запису не знайдено
- Прапор результату / успіху у поєднанні з попередніми параметрами для кращого керування.
Також деякі інтернет-провайдери можуть перехопити ваші запити та повернути вам 404 HTTP-код. Це не означає, що ваші дані не знайдені, але на транспортному рівні щось не так.
З Вікі :
У липні 2004 року британський провайдер телекомунікаційних послуг BT Group розгорнув систему блокування вмісту Cleanfeed, яка повертає помилку 404 у будь-який запит на вміст, визначений Фондом Інтернет-годин, як потенційно незаконний. Інші провайдери повертають HTTP 403 "заборонену" помилку за тих самих обставин. Практика використання підроблених 404 помилок як засобу для приховування цензури також повідомляється в Таїланді та Тунісі. У Тунісі, де цензура була жорстокою до революції 2011 року, люди усвідомили характер фальшивих помилок 404 і створили уявного персонажа на ім'я "Аммар 404", який представляє "невидимого цензора".
Чому б просто не відповісти чимось подібним?
{
"result": false,
"error": {"code": 102, "message": "Validation failed: Wrong NAME."}
}
Google завжди повертає 200 як код статусу в своєму API геокодування, навіть якщо запит логічно не відповідає: https://developers.google.com/maps/documentation/geocoding/intro#StatusCodes
Facebook завжди повертає 200 за успішні запити HTTP, навіть якщо запит REST не вдається: https://developers.facebook.com/docs/graph-api/using-graph-api/error-handling
Це прості коди HTTP для запитів HTTP. API REST - це ваш, визначте ваші коди статусу.