Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 March 08

RS

Roman Sachenko in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
Это ошибки разной категории. Неправильные входящие данные это один род ошибок, а «уже существует» - другой
Ну так мы же все равно можем назвать это валидацией :) Выкинуть соответствующий статус (400, 409, 422), но отнести к валидации.
источник

ЖШ

Женя Шапошников... in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
Но вообще я не тулила бы проверку существования email в валидацию. Потому что хорошее rest api на неправильные входные данные должно отвечать статусом 400 bad request, а в случае если email уже существует - 409 Conflict
А что именно дает конфликт, полей может быть много? Как вывести фронту ошибку?
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
В хорошем rest api каждый ответ имеет свой правильный статус. И к примеру в системе мониторинга мы следим за ошибками и видим что сегодня было столько то 400х ошибок, столько 409х, столько 500х
источник

ЖШ

Женя Шапошников... in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
В хорошем rest api каждый ответ имеет свой правильный статус. И к примеру в системе мониторинга мы следим за ошибками и видим что сегодня было столько то 400х ошибок, столько 409х, столько 500х
Иногда смотришь в эту таблицу кодов и думаешь какой выбрать)) + всегда хочется что-то еще сообщить со скупым ответом 409
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Женя Шапошников
А что именно дает конфликт, полей может быть много? Как вывести фронту ошибку?
Http ответ содержит статус и body.
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Я не говорила что body не слать
источник

ЖШ

Женя Шапошников... in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
Это ошибки разной категории. Неправильные входящие данные это один род ошибок, а «уже существует» - другой
Вот мне и интересно почему другой. И что от этого лучше? Нода насквозь вся асинхронная, а тут на тебе.
Когда работал на php, то во многих валидаторах проходит полная валидация от типа до наличия в базе и все так пишут.
источник

ЖШ

Женя Шапошников... in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
Http ответ содержит статус и body.
А если слать, то вопрос не снимается
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Yup делает асинхронную валидацию, он основан на joi, там можно дописать свой валидатор см. https://github.com/jquense/yup#mixedtestname-string-message-string--function-test-function-schema
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Женя Шапошников
Вот мне и интересно почему другой. И что от этого лучше? Нода насквозь вся асинхронная, а тут на тебе.
Когда работал на php, то во многих валидаторах проходит полная валидация от типа до наличия в базе и все так пишут.
Та писать можно как хотите. Но у нас поатежная система через нее каждый день ходят деньги. Настроен тщательный мониторинг за каждым статус кодом. Много 400х пошло значит кто то ломится с неправильными данными. Много 409х или 403 значит тоже нужно посмотреть что такое. Если бы все ответы были 200 не получилось бы мониторить аномалии.
источник

Г

Глеб in NodeUA - JavaScript and Node.js in Ukraine
если с сервера приходит статус 200 и, при этом, в теле ответа что-то вроде errors: [...], то, как гласит мем, – "всех – на переработку"
источник

ЖШ

Женя Шапошников... in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
Та писать можно как хотите. Но у нас поатежная система через нее каждый день ходят деньги. Настроен тщательный мониторинг за каждым статус кодом. Много 400х пошло значит кто то ломится с неправильными данными. Много 409х или 403 значит тоже нужно посмотреть что такое. Если бы все ответы были 200 не получилось бы мониторить аномалии.
Интересно с точеи зрения разделения ответственности, почему принято схему отдельно, а теперь ручками проверять другие моменты.
P.S. Коды можно вывести при любой реализации это не имеет отношение к вопросу
источник

ЖШ

Женя Шапошников... in NodeUA - JavaScript and Node.js in Ukraine
Вот на нем и остановился пока, да глюченный( Возвращаясь ко мнению @tshemsedinov - что нужно писать свое. Посмотрел его реализацию и не так уж и много там, при условии что мне нужно 15 процентов от всего функционала.
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Женя Шапошников
Интересно с точеи зрения разделения ответственности, почему принято схему отдельно, а теперь ручками проверять другие моменты.
P.S. Коды можно вывести при любой реализации это не имеет отношение к вопросу
Если проверка что email уже существует не обеспечена unique индексом в базе, то быстрый double click на signup кнопке сделает два пользователя с тем же email. Кажется, это ответственность сервиса/модели свалиться с ошибкой если такая модель уже есть.
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Глеб
если с сервера приходит статус 200 и, при этом, в теле ответа что-то вроде errors: [...], то, как гласит мем, – "всех – на переработку"
На переработку, видимо, надо отправить весь гугл, Фейсбук, Яндекс... Да всех, кто отличает ошибки бизнес-логики от других ошибок (протокола, доступа и т.п.) То есть практически все успешные компании
источник

ЖШ

Женя Шапошников... in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
На переработку, видимо, надо отправить весь гугл, Фейсбук, Яндекс... Да всех, кто отличает ошибки бизнес-логики от других ошибок (протокола, доступа и т.п.) То есть практически все успешные компании
Хотел написать тоже. Когда сталкивался с их апи, часто коды пишут или цифрами в теле (от 0 до ...) или ключом в теле сообщения, с пояснением в документации всех кодов ошибок.
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
На переработку, видимо, надо отправить весь гугл, Фейсбук, Яндекс... Да всех, кто отличает ошибки бизнес-логики от других ошибок (протокола, доступа и т.п.) То есть практически все успешные компании
Не поняла. Google и многие успешные компании возвращают правильные статус коды и 409 в том числе https://cloud.google.com/apis/design/errors
источник
2020 March 09

KS

Kirill Skomarovskiy in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
Пишите руками, не используйте библиотеки из npm
В таком случае при нахождении длины гипотенузы не используйте теорему Пифагора. И каждый раз выводите ее сами.
источник

IL

Ihor Levchenko in NodeUA - JavaScript and Node.js in Ukraine
Женя Шапошников
Вопрос @tshemsedinov  и всем про валидацию.

Есть POST запрос c телом:
{
email: "asd@das.com"
}

Хочется получить ответ при ошибках:
{
 errors: {
   email: [
     "Необходимо ввести это поле",
     "Не правильный формат для email",
     "Такой email уже есть в базе"
   ]
 }
}

Все библиотеки, которые я находил (joi, superstruct, ow) делают СИНХРОННУЮ валидацию схемы (первые два варианта ошибки), АСИНХРОННУЮ (третий вариант) принято обрабатывать в бизнес логике и потом также подводить к такому же формату.

1) Почему не сделать валидацию асинхронной и завести в нее проверку третьего случая?
Это упростит обработку ошибок и вывод их в апи, т. к. все будут работать через один механизм.

2) Кто какой использует валидатор?

P. S. Нашел только одну библиотеку которая делает валидацию ассинхронно - async-validator, но она имеет баги и слабовата.
Попробуй class-validator
Интересно спроектирована, мне нравится
источник

UT

User True in NodeUA - JavaScript and Node.js in Ukraine
Kirill Skomarovskiy
В таком случае при нахождении длины гипотенузы не используйте теорему Пифагора. И каждый раз выводите ее сами.
А лучше openssl самому написать )))
источник