#iis #asp.net-web-api #apm
#iis #asp.net-web-api #apm
Вопрос:
возьмите следующую конечную точку в качестве службы, которая возвращает информацию о пользователе на основе ее идентификатора
/getUser?id=1234
Как клиент или средство мониторинга могут отличить, что пользователь, у которого id = 1234, не существует, от того пользователя, который запрашивает страницу, которая не существует?
та же проблема, с которой я сталкиваюсь для всего кода состояния, например 500, моя команда инфраструктуры сказала мне, что вы сообщаете вводящую в заблуждение информацию, поскольку они не могут отличить 500, полученные из моего сервиса, и 500, полученные с самого сервера IIS
Ответ №1:
Это очень хороший вопрос.
В большинстве руководств вам с радостью скажут, что нужно вернуть NotFound, который равен 404. Я думаю, этим людям никогда не приходилось создавать И поддерживать API производственного уровня.
Вам нужно иметь некоторые соглашения и придерживаться их. Я предпочитаю возвращать 204 вместо 404. 204 означает, что вызовы завершились успешно, но содержимого не было. Таким образом, у вас будет четкое различие между тем, что данные не существуют и конечная точка не существует.
Что касается 500, ваш API никогда не должен возвращать 500, если только на стороне сервера не произошло что-то действительно плохое и неустранимое. Я бы не советовал радостно создавать исключения для всего. Если ваши бизнес-правила не выполняются, это не повод что-либо выбрасывать. Если ваш API не может получить доступ к вашей базе данных, для этого потребуется 500, чтобы стало очевидно, что произошло что-то действительно плохое. Что касается вашей сообщенной проблемы 500, я с этим не согласен. У IIS есть свои собственные журналы, у вашей службы будут свои собственные журналы, так что да, ваша команда инфраструктуры может отличить.
Комментарии:
1. За исключением того факта, что сам IIS никогда не возвращает 500.0, этот ответ охватывает большинство support.microsoft.com/en-ca/help/943891/… Команда инфраструктуры должна уметь различать, когда они анализируют файлы журналов IIS (с вложенным статусом в записях), но по проводам все видят только код состояния 500 (тело варьируется).