Ответ Web-API -- оборачивать ли с добавлением кода ошибки?
От: Shmj Ниоткуда  
Дата: 05.04.17 10:01
Оценка:
Собственно такой вопрос.

Вот Web-API возвращает некое значение или вообще пустой ответ.

Можно сделать так:

1. Вернуть только само значение либо пустой ответ. А при возникновении исключения -- вернуть совсем другой ответ, с другой структурой, в котором будет тип исключения и доп. информация.

2. Обернуть в пакет так, чтобы всегда присутствовала информация о статусе выполнения. Ну, типа сделаете так:

{
   "ErrorType": "Auth",
   "ErrorMessage": "Token expired",
   "Result": null
}


Или успешно (при пустом ответе):

{
   "ErrorType": null,
   "ErrorMessage": null,
   "Result": null
}

Тогда структура пакета всегда будет одинаковой.

Какой бы вы вариант предпочли?
Отредактировано 05.04.2017 10:02 Shmj . Предыдущая версия .
Re: Ответ Web-API -- оборачивать ли с добавлением кода ошибки?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.04.17 10:15
Оценка:
Здравствуйте, Shmj, Вы писали:

SМожно еще вернуть
400: статус BadRequest — ошибка при выполнении запроса

https://metanit.com/sharp/aspnet_webapi/2.9.php
и солнце б утром не вставало, когда бы не было меня
Re: Ответ Web-API -- оборачивать ли с добавлением кода ошибки?
От: bnk СССР http://unmanagedvisio.com/
Дата: 05.04.17 11:05
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>Собственно такой вопрос.


S>Какой бы вы вариант предпочли?


Разумеется первый.

Тащить во все передаваемые структуры данных поля ошибок — это плохая практика, код будет грязный.

Да, разумеется HTTP код для ответа с ошибкой тоже должен быть 'ошибочным' (>= 400).

Большинство известных науке клиентских библиотек рассчитано на этот сценарий.
Re: Ответ Web-API -- оборачивать ли с добавлением кода ошибки?
От: QrystaL Украина  
Дата: 05.04.17 11:06
Оценка: 3 (1)
Здравствуйте, Shmj, Вы писали:
S>Какой бы вы вариант предпочли?
Использовать стандартные средства

1) 200 ответ:
Ok(result);


2) Unhandled Exception:
Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "An unexpected error.", ex); // В этом случае в зависимости от параметров в web.config будет присутствовать (или нет) тип исключения, стек трейс и т.д.


3) конкретные типы исключений и/или кастомная логика
if (!ModelState.IsValid)
{
    Request.CreateErrorResponse(HttpStatusCode.BadRequest, context.ModelState);
}
Re: Ответ Web-API -- оборачивать ли с добавлением кода ошибки?
От: Kolesiki  
Дата: 05.04.17 12:31
Оценка: 6 (1)
Здравствуйте, Shmj, Вы писали:

S>2. Обернуть в пакет так, чтобы всегда присутствовала информация о статусе выполнения.


Всё уже обёрнуто до нас
Re: Ответ Web-API -- оборачивать ли с добавлением кода ошибк
От: #John Европа https://github.com/ichensky
Дата: 05.04.17 15:21
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Какой бы вы вариант предпочли?


Обычно в результате возвращаю HTTP код + код в json — для большей совметимости,
удобности исспользованаия браузерами и третьими клиентами.
В коде бросаю кастомное исключение и перехватываю его в классе реализующем ExceptionFilterAttribute
и добавляю соответстующие HTTP CODE и {"code":..}

если успех (HTTP 200):
{"code":0}

{"code":0,"id":100500,"name":"xxx"}

если серверная ошибка(пользователю незачем знать почему произошла ошибка):
{"code":500}

если ошибка авторизации:
{"code":401}

типичная ошибка, при добавлении пользовательских данных:
{"code":400,"errors":[{"name":"color","message":"'color' should not be empty."},{"name":"color","message":"'color' must be between 1 and 128 characters. You entered 0 characters."}]}
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
Отредактировано 05.04.2017 15:23 #John . Предыдущая версия .
Re[2]: Ответ Web-API -- оборачивать ли с добавлением кода ошибки?
От: Shmj Ниоткуда  
Дата: 06.04.17 03:33
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Всё уже обёрнуто до нас


Да, согласен. Если есть стандарт -- значит нужно ему следовать. И так бардака много.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.