Что такое Правильное Исключение для вызова в API отдыха в ответ на запрос на удаление ресурса без достаточного разрешения? - PullRequest
1 голос
/ 24 марта 2019

Я создаю API отдыха, используя ASP.net Core и bit-framework
Мы хотим, чтобы клиенты имели возможность удалять только те ресурсы, которые они создалисами

Вопросы:

Если клиент просит удалить ресурс, созданный другим клиентом,

  1. Что является лучшим исключением для повышения в API?

  2. Какой самый правильный код статуса HTTP для возврата?

  3. Все исключения, реализованные в пространстве имен Bit.Owin.Exceptions: \

    1. BadRequestException
    2. ResourceNotFoundException
    3. AppException
    4. DomainLogicException

    Должен ли я придерживаться этогосписок исключений в моем API?Будет ли этот список исключений включать больше исключений, чтобы охватить больше сценариев?


Я думаю, что один из этих кодов состояния должен быть возвращен, но какой из них лучше подходит нашему условию?:

  • 403 Запрещено
  • 405 Не разрешено
  • 409 Конфликт ресурсов

Ответы [ 2 ]

3 голосов
/ 26 марта 2019

Я не знаком с фреймворком, который вы используете. Но позвольте мне дать вам мои 2 цента. С точки зрения потребителя API, код состояния 403 представляется вполне разумным выбором для ситуации, описанной в вашем вопросе:

6.5.3. 403 Запрещено

Код состояния 403 (Запрещено) указывает, что сервер понял запрос, но отказывается его авторизовать. Сервер, который желает обнародовать, почему запрос был запрещен, может описать эту причину в полезной нагрузке ответа (если есть). [...]

В качестве альтернативы, если вы намереваетесь скрыть существование ресурса, создайте исключение, которое отображается на 404:

Исходный сервер, который хочет «скрыть» текущее существование запрещенного целевого ресурса, МОЖЕТ вместо этого ответить кодом состояния 404 (не найден).

1 голос
/ 27 марта 2019

Исходя из ответа @ cassiomolin , вы можете создать свой собственный тип исключения на основе следующих документов:

https://docs.bit -framework.com / вводная информация / web-api #обработка исключений

добавление типа исключения к известным в битовой среде исключениям

public class CanNotDeleteOtherClientResourceException : Exception, IKnownException, IHttpStatusCodeAwareException
{
    public CanNotDeleteOtherClientResourceException(string message)
        : base(message)
    {
    }

    public HttpStatusCode StatusCode { get; set; } = HttpStatusCode.Forbidden;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...