Нужно ли возвращать ошибку из rest api?

Делаю метод, который отправляет приглашение пользователю, но в методе есть проверки, при которых приглашение не будет отправлено. Нужно ли в случае, если проверка не прошла, выбрасывать ошибку или правильнее отправлять текст с ошибкой и статусом 200?
public function invite()
{
    $email = request()->input('email');

    $user = User::where('email', $email)->first();

    if ($user->isCustomer) {
        abort(403);
    }

    //отправляем приглашение
}

В коде проверка, не является ли пользователь покупателем, но ошибкой ведь это не является.
То есть я мог бы вместо abort(403) возвращать статус 200 с телом ответа, например:
if ($user->isCustomer) {
    return response()->json(['status' => 'error']);
} else {
    return response()->json(['status' => 'ok']);
}

Принимать на клиенте и парсить ответ.
Как правильно?
  • Вопрос задан
  • 1906 просмотров
Решения вопроса 2
ivan_zhuck
@ivan_zhuck
По идее, код 403 Forbidden тут подходит, ведь использование этого метода запрещено пользователю с определенной ролью. Ну и чтобы было понятно в почему ответ 403, можно сделать так:

return response()->json(['error' => 'Forbidden for current user role.'], 403);


Ну или 422 Unprocessable Entity можно отправлять, если проверка идет не роли пользователя, который отправляет запрос, а роли пользователя, которому отправляют инвайт. Тогда по сути это ошибка валидации:

return response()->json(['error' => 'The required user is a customer.'], 422);
Ответ написан
Alex_Wells
@Alex_Wells
PHP/TS/Kotlin developer
403 отношения к этому не имеет. 403 относится к юзеру, который делает реквест.

Это ошибка. 200 значит, что ВСЕ прошло успешно, чего в вашем случае не произошло.

Бросайте 412 или 422 - не надо придумывать велосипед. И никаких status тоже не нужно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
daemonhk
@daemonhk
ПсиХоПат
Ошибки бывают 2 видов: серверные и клиентские. Если вы получили серверную (404, 500, etc), отдавайте общее сообщение о том, что "Что-то пошло не так". Если ошибка клиентская (пользователь не найден, у пользователя не те права), отдавайте свои сообщения под каждый случай. Конечный пользователь должен наглядно видеть что он делает не так, а не эти ваши заумности в коде.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы