Это отличный вопрос, и я отвечу на него конкретным примером из собственного опыта. В API для одного из моих проектов я разрешаю загрузку электронной таблицы Excel, которая обрабатывается, и полученный JSON сохраняется на сервере.
Если при сохранении данных на диск возникает ошибка, я отвечаю сообщением об ошибке «JSend» вместе с соответствующим сообщением об ошибке, поскольку данные должны быть в состоянии сохранить.
Если, с другой стороны, данные в одной из строк недопустимы (возможно, неверный тип данных или ошибка диапазона), то я знаю точные строки (или строки) электронной таблицы, которые были неверными. В этом случае подходит ответ «сбой», так как свойство data
ответа JSend будет содержать список всех строк (номер строки и сообщение об ошибке) для каждой необработанной строки.
В случае ответа "ошибка" у меня не было бы этой способности, поскольку я был бы ограничен одним свойством message
. Но с ответом «fail» у меня есть свойство data
, где я могу ответить с подробным списком проблем.
Итак, пока не было ошибки 1015 *, сами данные были неверны, и пользователь должен вернуться к своей электронной таблице и исправить проблемы, определенные свойством data
в «fail». ответ.
Думая об этом с точки зрения ошибок HTTP, хотя это интересное упражнение, оно не всегда приводит к точному отображению (4xx = сбой, 5xx = ошибка). Это больше о том, что вы хотите сообщить клиенту: случилось что-то плохое, чего не должно было случиться («ошибка») или сервер работает нормально, но ваши данные не работают вполне соответствует стандартам («провал»).
Наконец, хотите ли вы также использовать ошибки HTTP, полностью зависит от вас. Вы всегда можете ответить 200 и позволить JSend говорить. Но это немного другое (и несколько религиозное) обсуждение. : -)
Надеюсь, это поможет.