возвращать ошибки при валидации полей?
Т.е. серверу отдавать текст ошибки на русском и в приложении выводить?
Или какой-то код ошибки, и в приложении собственные текста ошибок?
Нормальной ли практикой является выводить в приложении текст ошибок что пришлет сервер?
Особенно при валидации полей формы, когда их много и они разнообразны
и код и текст можно вернуть. Могут быть нюансы только если у тебя много языков, переводить это все.
желательно отдавать и код и сообщение
И так и так нормально Отдавать то что сервер показывает - тоже нормально
но это все зависит от реализации... кстати какого типа api?
если апи хорошо задокументировано то вообще пофиг
представь, валидация банальной формы регистрации: 'phone' => ['required', new PhoneNumber(), 'exists:users,phone'], 'password' => 'required|string|min:6|max:50|...', стандартный ответ Laravel на такую штуку: 422 errors [ 'phone' => [ ... ], 'password' => [ ... ] ] и если просто вывести текст ошибки - нет проблем, видно в каком поле и какая ошибка допустим ошибка "должен быть не менее 6 символов" (пароль) в каком формате это вообще можно создать код этой ошибки?
подгляди в чужих публичных апи как сделано
ну в таком и вернуть. Формат ведь вы определяете?
API для мобильного приложения, для сайта
ну то есть код ТЕКСТА ошибки я не знаю как сформировать можно просто указать что невалидные поля, можно указать какое поле, но вот конкретно что там 6 или 8 символов минимальный пароль - это уже либо доп. параметр какой-то, либо просто тупо забить и вывести ТЕКСТ ошибки и показать его в мобильном приложении
Выводи текст
ну просто текст ошибки и всё наверное это норм практика видно что ошибки в полях есть, видно какое поле, и текст ошибки просто разработчик потребовал от меня типа код ошибки на англ., допустим: user not found user already registered email required а он массив с ошибками и уже сам текста свои пишет... но это очень замутно выходит мне такое готовить, особенно с ситуацией на проверку длины строки 😐
если это твое мобильное приложение то оно само итак знает какие поля как валидировать. вернее ты уже в мобильном приложении должен был настроить валидацию не пуская юзера в апи, но если уж он как-то пролез то фронт опять же знает правила валидации каждого поля
я тоже думаю это проще, спасибо
Ну ты ведь сам формат определяешь? В чем проблема придумать формат JSON в котором вернуть все? Вот к примеру симфони возвращает как то так { "status": "fail", "data": { "type": "https://symfony.com/errors/validation", "title": "Validation Failed", "detail": "contract.start: Дата начала действия полиса не может быть меньше текущей даты.\npreviousPolicy.number: Значение не должно быть пустым.\npreviousPolicy.company: Значение не должно быть пустым.", "violations": [ { "propertyPath": "contract.start", "title": "Дата начала действия полиса не может быть меньше текущей даты.", "parameters": { "{{ value }}": "30 мая 2023 г., 00:00", "{{ compared_value }}": "16 июл. 2023 г., 00:00", "{{ compared_value_type }}": "DateTime" }, "type": "urn:uuid:778b7ae0-84d3-481a-9dec-35fdb64b1d78" },
пишет приложение сторонний разработчик а я API для него
нет, это не норм... хорошо бы отдать в том числе и код ошибки, а текст это просто дескрипшин
ну из твоего ответа я не смогу сформировать собственные текста ошибок, мне проще выводить твой текст и всё) и это норм практика как я понял
Не понял, что значит не сможешь? Еще как сможешь все.
а код ошибки - что такое-то поле невалидно? это отдается или код ТЕКСТА ошибки? или точнее для какого-то ПРАВИЛА допустим "min: 6" - длина пароля не может быть менее 6 знаков ну бред же формировать код для этого правила?
так как на стороне клиента могут захотеть изменить сообщение об ошибке (например добавить матерных слов или ещё чего), а вот код и описание ошибки это правильное решение... меньше будет к тебе вопросов
Ну как бы не бред. Можно вернуть что у тебя там длина в определенном поле фиксированная. Ты ожидаешь имя и фамилию а тебе туда краткое содержание войны и мира пихают. Хорошим тоном будет вернуть ошибку с тем что у тебя есть мин и макс, а не просто текстом "Слишком длинное имя".
contract.start: Дата начала действия полиса не может быть меньше текущей даты. а я хочу написать "Дата начала действия поля должна быть меньше 17 июля 2023" и по-моему это с ума сойти чтобы это такое готовить и не дай Бог ты одну букву изменишь в тексте, и всё// надеюсь ты понимаешь о чем я
я и возвращаю детально всё просто разработчик сначала сказал - ты присылай мне не "текст ошибки на русском", а некий код ошибки каждой, и я уже сам напишу текст по-моему это бредовая затея
обычно делают один код ошибки на подобные случаи, но с разным описанием либо если прямо совсем красиво, то да, на каждый подобный кейс делается отдельный код ошибки... и это не сложно (ты ведь валидатор уже написал) ... банально выкидывай эксепшены и формируй ответ
Ну так ты можешь как угодно все это вернуть ведь? Условно у тебя есть некий валидатор твоей формы, в нем на каком то поле есть конкретные типы валидаторов. Конкретно в этом поле contract.start у тебя есть валиадатор типа NotCurrentDate. Так вот этот тип валидатора и должен уметь возвращать нужную ошибку, которую потом можно конвертнуть и правильное описание, и в нужный код.
Нет, это правильно. У него там описание ошибки может быть свое в зависимости от кода.
только тогда все это должно быть хорошо задокументировано..... бывает в документации к апи порядка 80% занимает описание кодов ошибок
т.е. идеальный сценарий для него, это вернуть что-то типа: 422 errors = [ 'phone' => ['required', 'min', 'invalid_format', 'user_registered'] ] а он в своем уже выводит собственные текста но чем сложнее формы в проекте - тем понимаешь насколько это бредовая затея...
ничего не бредовая... ты же их гоняешь через определенные валидаторы? вот нужно чтобы валидарот и выкидывал исключение с кодом и сообщением об ошибке
но по факту валидация происходит на моем сервере, а не у него в приложении тут уж чуть ли не валидатор свой изобретаем В Laravel есть валидатор, и он формирует достаточно подробную инфу по каждому полю Мне кажется поймать текст ошибки - и вывести его вполне нормальный вариант Это не мега-крутое приложение на 100 языках, а простое
а потом их все мержишь в один массив и будь здоров
приведи тогда пример кодов ошибок к примеру для этой ситуации? 422 errors = [ 'phone' => ['required', 'min', 'invalid_format', 'user_registered'] ] я могу сегодня сделать что будет пароль минимум 6 знаков завтра поставлю 8 твое мега-приложение моб. должно это учитывать т.е. я должен отдавать еще параметр типа: 422 errors = [ 'phone' => ['required', 'min:6', 'invalid_format', 'user_registered'] ]
в этом примере нет кодов ошибок, чтобы я мог на англ. языке к примеру в своем приложении сформировать ответ
Обсуждают сегодня