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

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

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

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

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

35 ответов

114 просмотров

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

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

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

но это все зависит от реализации... кстати какого типа 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
Ну ты ведь сам формат определяешь? В чем проблема ...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта