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

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

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

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

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

35 ответов

42 просмотра

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

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

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

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

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

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

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

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
У тебя в конфиге нигде нет deny all; или вообще любого deny?
Alexander Sherbakov
10
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Есть ли смысл устраиваться на 1с ? Даст это плюс в дальнейшем трудоустройстве на php? Просто у меня в городе вакансий на пхп нету. Или лучше удаленно искать. Опыта работы нету...
Azamat
14
Ребят, чет я уже не догоняю... Крч в коде на асм там происходит нечто вроде a+число (a+1, a+2 и т.д.). Но почему строка lea ecx, [edx+1] работает как a+1?? В edx берется адрес...
Alan 🔝 Бэброу
4
Карта сайта