Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 9

Спасибо за статью! У сожалению, у самих тэгов есть несколько проблем: они быстро нагружаются, особенно если мы туда добавим ещё JSON; они являются произвольными строками, а значит, компилятор не поймает ошибки; они не очевидны тем, кто не знает, что это такое. Очень круто, что есть возможность сторонней конфигурации. Но! Есть смысл делать валидаторы программными, чтобы компилятор сразу проверил возможность применения данного валидаторы. Плата - небольшой синтаксический оверхед (зато отсутствие какой-либо интерпретации или оверхеда на запуск или кеширование). Ну и, зачастую, не нужны сторонние библиотеки.

  1. Нагружаются теги - да, есть такое. Но на мой вкус - не критично. Валидация используется для выходящих объектов, а там разве что json/yaml ещё будет.

  2. Для того, чтобы поймать ошибки в таких тегах есть юнит-тесты

  3. "не очевидны тем, кто не знает" - ну тут уж извините... Доку надо читать )

Для меня единственный минус этого валидатора - использование рефлексии, и, соответственно, скорость выполнения. Поэтому где возможно использую генератовы

За статью спасибо. Но валидация на тегах отвратительна, особенно когда появляются зависимости типа required_unless, и это никак не проверятся компилятором.

Мне гораздо ближе подход из этой библиотеки: https://github.com/invopop/validation

Очень хорошая вещь :-) теоретически.
Практически испытаю попозже,
хотел сам такое же сделать.

Спасибо за статью!

кто-нибудь делал на основе этого валидатора ответ наружу в формате?
{
"status_code": 400,
"error": {
"type": "validation",
"field": "email",
"message": "some text about field validation"
}
}

как парсить сообщение валидатора и формировать нужный ответ?

Вообще go-playground возвращает типизированные ошибки, в которых есть и сработавший тег, и имя поля

К сожалению, в этом и есть проблема. Часто хочется вернуть человеческий текст ошибки, на разных языках, например. Приходится реализовывать интерфейсValidate() с кастомными кодами ошибок, либо подключать что-то вроде https://github.com/invopop/validation, предложенную выше.

Спасибо за наводку, поковыряю

Зарегистрируйтесь на Хабре, чтобы оставить комментарий