Задать вопрос
@crack_user

Как лучше реализовать проверку передачи данных в api?

Делаю апишку, и задался вопросом, как лучше реализовать проверку обязательных параметров в методе? Чтобы в случае если обязательный параметр не был передан - то выдавать ошибку мол "Не указан обязательный параметр 'name'"

public function addCourse(string $name, array $dates, float $price, string $code): array
    {
        if (empty($name)) {
            throw new Exception('Название курса не указано.');
        }
        if (empty($price)) {
            throw new Exception('Цена курса не указана.');
        }
        if (empty($code)) {
            throw new Exception('Код курса не указан.');
        }
}


Не буду же я для каждой переменной вызывать exception.
Была идея сделать отдельный метод "validateRequiredFields" и передавать туда $_POST и массив с обязательными параметрами, но не знаю насколько правильно юзать такой варик
что-то по типу такого -
protected function validateRequiredFields(array $data, array $requiredFields): void
{
    $missingFields = [];

    foreach ($requiredFields as $field) {
        if (empty($data[$field])) {
            $missingFields[] = $field;
        }
    }

    if (!empty($missingFields)) {
        throw new Exception('Не указаны обязательные параметры: ' . implode(', ', $missingFields));
    }
}


Буду рад вашим советам
  • Вопрос задан
  • 56 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Отдельно проверять наличие нет смысла. Если уж валидировать, то нормально, каждое поле, на соответствие ожидаемому формату. Ну и заодно и наличие.
А скопом если проверять, то скорее на наличие лишних полей.

Плюс никаких исключений. Странно, что я не обратил на это внимание в прошлый раз, там этот говнокод с try catch просто везде. Самому не надоедает всё время писать эти тру, кетч, ретурн для каждого запроса? И с какой стати пользователь API должен читать, что в БД нету например нужной таблицы? Это ВНУТРЕННЯЯ информация, которая не должна утекать наружу

Как вариант, метод validate должен возвращать массив с ошибками.
Если массив пустой, то используем данные
Если не пустой - возвращаем их пользователю.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@artem-dainov
Php, java, js. Boot spring, jquery, git
Лично я сделал бы для каждого поля throw new Exception
таким образом я сам лично буду контролировать каждую кинутую ошибку.
Если вы хотите сократить количество throw new Exception, то объедините в в один if все поля, но тогда у вас отпадает возможность указать, кто не заполнен.
Далее, когда вы будете вызывать метод, используйте один try catch для всех методов, выполняющие что-то в одном контроллере.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы