170 похожих чатов

Всем привет. Подскажите если разрабатывается API для приложения, как правильно

возвращать ошибки при валидации полей?

Т.е. серверу отдавать текст ошибки на русском и в приложении выводить?
Или какой-то код ошибки, и в приложении собственные текста ошибок?

Нормальной ли практикой является выводить в приложении текст ошибок что пришлет сервер?
Особенно при валидации полей формы, когда их много и они разнообразны

35 ответов

52 просмотра

и код и текст можно вернуть. Могут быть нюансы только если у тебя много языков, переводить это все.

желательно отдавать и код и сообщение

И так и так нормально Отдавать то что сервер показывает - тоже нормально

но это все зависит от реализации... кстати какого типа api?

если апи хорошо задокументировано то вообще пофиг

Александр-www Автор вопроса
Alexander Nazarov
и код и текст можно вернуть. Могут быть нюансы тол...

представь, валидация банальной формы регистрации: 'phone' => ['required', new PhoneNumber(), 'exists:users,phone'], 'password' => 'required|string|min:6|max:50|...', стандартный ответ Laravel на такую штуку: 422 errors [ 'phone' => [ ... ], 'password' => [ ... ] ] и если просто вывести текст ошибки - нет проблем, видно в каком поле и какая ошибка допустим ошибка "должен быть не менее 6 символов" (пароль) в каком формате это вообще можно создать код этой ошибки?

Александр www
представь, валидация банальной формы регистрации: ...

ну в таком и вернуть. Формат ведь вы определяете?

Александр-www Автор вопроса
SDmitr
но это все зависит от реализации... кстати какого ...

API для мобильного приложения, для сайта

Александр-www Автор вопроса
Alexander Nazarov
ну в таком и вернуть. Формат ведь вы определяете?

ну то есть код ТЕКСТА ошибки я не знаю как сформировать можно просто указать что невалидные поля, можно указать какое поле, но вот конкретно что там 6 или 8 символов минимальный пароль - это уже либо доп. параметр какой-то, либо просто тупо забить и вывести ТЕКСТ ошибки и показать его в мобильном приложении

Выводи текст

Александр-www Автор вопроса

ну просто текст ошибки и всё наверное это норм практика видно что ошибки в полях есть, видно какое поле, и текст ошибки просто разработчик потребовал от меня типа код ошибки на англ., допустим: user not found user already registered email required а он массив с ошибками и уже сам текста свои пишет... но это очень замутно выходит мне такое готовить, особенно с ситуацией на проверку длины строки 😐

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

Александр-www Автор вопроса
Sergey 🧻🤲
Выводи текст

я тоже думаю это проще, спасибо

Александр www
ну то есть код ТЕКСТА ошибки я не знаю как сформир...

Ну ты ведь сам формат определяешь? В чем проблема придумать формат 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" },

Александр-www Автор вопроса
Дмитрий Щербаков
если это твое мобильное приложение то оно само ита...

пишет приложение сторонний разработчик а я API для него

Александр www
ну просто текст ошибки и всё наверное это норм пра...

нет, это не норм... хорошо бы отдать в том числе и код ошибки, а текст это просто дескрипшин

Александр-www Автор вопроса
Alexander Nazarov
Ну ты ведь сам формат определяешь? В чем проблема ...

ну из твоего ответа я не смогу сформировать собственные текста ошибок, мне проще выводить твой текст и всё) и это норм практика как я понял

Александр www
ну из твоего ответа я не смогу сформировать собств...

Не понял, что значит не сможешь? Еще как сможешь все.

Александр-www Автор вопроса
SDmitr
нет, это не норм... хорошо бы отдать в том числе и...

а код ошибки - что такое-то поле невалидно? это отдается или код ТЕКСТА ошибки? или точнее для какого-то ПРАВИЛА допустим "min: 6" - длина пароля не может быть менее 6 знаков ну бред же формировать код для этого правила?

SDmitr
нет, это не норм... хорошо бы отдать в том числе и...

так как на стороне клиента могут захотеть изменить сообщение об ошибке (например добавить матерных слов или ещё чего), а вот код и описание ошибки это правильное решение... меньше будет к тебе вопросов

Александр www
а код ошибки - что такое-то поле невалидно? это от...

Ну как бы не бред. Можно вернуть что у тебя там длина в определенном поле фиксированная. Ты ожидаешь имя и фамилию а тебе туда краткое содержание войны и мира пихают. Хорошим тоном будет вернуть ошибку с тем что у тебя есть мин и макс, а не просто текстом "Слишком длинное имя".

Александр-www Автор вопроса
Alexander Nazarov
Не понял, что значит не сможешь? Еще как сможешь в...

contract.start: Дата начала действия полиса не может быть меньше текущей даты. а я хочу написать "Дата начала действия поля должна быть меньше 17 июля 2023" и по-моему это с ума сойти чтобы это такое готовить и не дай Бог ты одну букву изменишь в тексте, и всё// надеюсь ты понимаешь о чем я

Александр-www Автор вопроса
Alexander Nazarov
Ну как бы не бред. Можно вернуть что у тебя там дл...

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

Александр www
а код ошибки - что такое-то поле невалидно? это от...

обычно делают один код ошибки на подобные случаи, но с разным описанием либо если прямо совсем красиво, то да, на каждый подобный кейс делается отдельный код ошибки... и это не сложно (ты ведь валидатор уже написал) ... банально выкидывай эксепшены и формируй ответ

Александр www
contract.start: Дата начала действия полиса не мож...

Ну так ты можешь как угодно все это вернуть ведь? Условно у тебя есть некий валидатор твоей формы, в нем на каком то поле есть конкретные типы валидаторов. Конкретно в этом поле contract.start у тебя есть валиадатор типа NotCurrentDate. Так вот этот тип валидатора и должен уметь возвращать нужную ошибку, которую потом можно конвертнуть и правильное описание, и в нужный код.

Александр www
я и возвращаю детально всё просто разработчик сна...

Нет, это правильно. У него там описание ошибки может быть свое в зависимости от кода.

SDmitr
он прав

только тогда все это должно быть хорошо задокументировано..... бывает в документации к апи порядка 80% занимает описание кодов ошибок

Александр-www Автор вопроса
SDmitr
обычно делают один код ошибки на подобные случаи, ...

т.е. идеальный сценарий для него, это вернуть что-то типа: 422 errors = [ 'phone' => ['required', 'min', 'invalid_format', 'user_registered'] ] а он в своем уже выводит собственные текста но чем сложнее формы в проекте - тем понимаешь насколько это бредовая затея...

ничего не бредовая... ты же их гоняешь через определенные валидаторы? вот нужно чтобы валидарот и выкидывал исключение с кодом и сообщением об ошибке

Александр-www Автор вопроса
Alexander Nazarov
Нет, это правильно. У него там описание ошибки мож...

но по факту валидация происходит на моем сервере, а не у него в приложении тут уж чуть ли не валидатор свой изобретаем В Laravel есть валидатор, и он формирует достаточно подробную инфу по каждому полю Мне кажется поймать текст ошибки - и вывести его вполне нормальный вариант Это не мега-крутое приложение на 100 языках, а простое

SDmitr
ничего не бредовая... ты же их гоняешь через опред...

а потом их все мержишь в один массив и будь здоров

Александр-www Автор вопроса
SDmitr
ничего не бредовая... ты же их гоняешь через опред...

приведи тогда пример кодов ошибок к примеру для этой ситуации? 422 errors = [ 'phone' => ['required', 'min', 'invalid_format', 'user_registered'] ] я могу сегодня сделать что будет пароль минимум 6 знаков завтра поставлю 8 твое мега-приложение моб. должно это учитывать т.е. я должен отдавать еще параметр типа: 422 errors = [ 'phone' => ['required', 'min:6', 'invalid_format', 'user_registered'] ]

Александр-www Автор вопроса
Alexander Nazarov
Ну ты ведь сам формат определяешь? В чем проблема ...

в этом примере нет кодов ошибок, чтобы я мог на англ. языке к примеру в своем приложении сформировать ответ

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

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Какой дос блять?
007
9
Коллеги, а в чём сейчас хорошо писать на перле, в смысле ide? Пробовал в идее с плагином, подсветка есть, даже какие-то предупреждения есть, но рефакторинга считай нет. Перене...
Дмитрий Петров
9
Карта сайта