Size: a a a

Node.js — русскоговорящее сообщество

2020 May 04

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Pavel Shakhov (pongo)
Валидация входящих параметров - это бизнес операция, она не может быть фатальна
Хм.

Я имею в виду какую-то «пре-валидацию».

Например, если функция должна отправить сообщение юзеру, а по такому id юзера нет – это это _несомненно_ бизнес-операция (API отработало, база чекалась), и ответ должен быть 200.

Но если вместо id передана строка, а не число? Или null? Или объект!?
Логика, по-хорошему, должна перед тем как базу этим кормить – проверить, что аргументы и их типы верны.
И если не верны – то операция не будет выполнена, и это уже ошибка ПРОГРАММИСТА, который писал фронт, а не штатная ситуация на фронте.

Однако, архитектура сервера может быть и такой, что «сразу» параметры валидировать не получится, тогда уж увы.
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Sergey 🛸
Просто 403
«А чтобы понять, почему 403 – будем тело ответа парсить».
источник

PS

Pavel Shakhov (pongo... in Node.js — русскоговорящее сообщество
Алексей Клименко
Хм.

Я имею в виду какую-то «пре-валидацию».

Например, если функция должна отправить сообщение юзеру, а по такому id юзера нет – это это _несомненно_ бизнес-операция (API отработало, база чекалась), и ответ должен быть 200.

Но если вместо id передана строка, а не число? Или null? Или объект!?
Логика, по-хорошему, должна перед тем как базу этим кормить – проверить, что аргументы и их типы верны.
И если не верны – то операция не будет выполнена, и это уже ошибка ПРОГРАММИСТА, который писал фронт, а не штатная ситуация на фронте.

Однако, архитектура сервера может быть и такой, что «сразу» параметры валидировать не получится, тогда уж увы.
А откуда превалидатор знает какого типа должен быть параметр? От бизнеса. Значит это все равно часть бизнес операции
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Pavel Shakhov (pongo)
А откуда превалидатор знает какого типа должен быть параметр? От бизнеса. Значит это все равно часть бизнес операции
JSON схема может быть?
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
Алексей Клименко
«А чтобы понять, почему 403 – будем тело ответа парсить».
Для неверного пароля нужно тело парсить хоть при 200 хоть при 403
источник

PS

Pavel Shakhov (pongo... in Node.js — русскоговорящее сообщество
Алексей Клименко
JSON схема может быть?
Ее все равно диктует бизнес
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Pavel Shakhov (pongo)
Ее все равно диктует бизнес
Так я и не говорил, что все мои перечисленные ошибки – обязательно nginx должен отдавать, а express всегда отвечать 200.

До эндпоинта-то запросы доходят. Мы ж не прокси, что сами не знаем, что принимаем.
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Кстати, ещё есть GET-апи. Вот для него обилие кодов очень удобно, потому что «тело» обычно какое-нибудь бинарное.

404 – нет файла (но есть эндпоинт),
403 – неверна авторизация,
400 – что-то не передано или эндпоинт не тот.
источник

Z

Zhola in Node.js — русскоговорящее сообщество
Всем привет
Кто сталкивался с таким ошибкой '{object: bull prototype}', именно про авторизации, сделал console.log(res.cookies)
источник

Z

Zhola in Node.js — русскоговорящее сообщество
Null*
источник

АП

Алексей Попов... in Node.js — русскоговорящее сообщество
Попов Алексей
Здравствуйте, кто ни будь разрабатывал сайты данные которых лежат на внешней CRM, т.е. заказчик говорит, вот мол: - "У меня все в CRM 100500 товаров" хочу сайт, чтобы все работало. На этой CRM внешней конечно есть ограничения на выполнения N-запросов в секунду и одновременно выполнять эти N-запросы.
По сути, берем данные из API, грузим себе куда ни будь в БД, т.е. нужно организовать некую синхронизацию.
У кого был такой опыт, как быть с консистентностью данных?
Например, взяли мы данные, положили у себя, тут пользователь на сайте оформляет заказ, а тут менеджер удаляет какую-то категорию товаров, переименовывает.
а зачем к себе в базу что-то класть?
почему не хочется использовать api crm всегда?
источник

ПА

Попов Алексей... in Node.js — русскоговорящее сообщество
Алексей Попов
а зачем к себе в базу что-то класть?
почему не хочется использовать api crm всегда?
там ограничения на выполнение запросов, т.е. если тот же поисковик будет индексировать, я просто не смогу всех обслужить
источник

ПА

Попов Алексей... in Node.js — русскоговорящее сообщество
ну и хочется сделать полнотекстовый поиск, elasticsearch, думаю в нем хранить хотя пока только мысли гоняю
источник

АП

Алексей Попов... in Node.js — русскоговорящее сообщество
Попов Алексей
там ограничения на выполнение запросов, т.е. если тот же поисковик будет индексировать, я просто не смогу всех обслужить
Сильное ограничение? Можно очередь организовать, контролировать нагрузку
Синхронизация будет болью в любом случае
Хоть по расписанию, хоть в момент заказа
источник

ПА

Попов Алексей... in Node.js — русскоговорящее сообщество
Алексей Попов
Сильное ограничение? Можно очередь организовать, контролировать нагрузку
Синхронизация будет болью в любом случае
Хоть по расписанию, хоть в момент заказа
да, ты понимаешь, там боль самого API или я что-то не понимаю, там, чтобы нормально страницу вывести с категориями и товарами надо кучу запросов выполнить к API, плюс у товаров свои модификации и т.д.
источник

YG

Yury Golikov in Node.js — русскоговорящее сообщество
Попов Алексей
да, ты понимаешь, там боль самого API или я что-то не понимаю, там, чтобы нормально страницу вывести с категориями и товарами надо кучу запросов выполнить к API, плюс у товаров свои модификации и т.д.
А если только на запись читать из crm, а для операций чтения хранить кеш в локальной базе?
источник

YG

Yury Golikov in Node.js — русскоговорящее сообщество
По хорошему тут подойдут теже решения что и для любой распределенной системы. У тебя eventual consistency.
источник

PS

Pavel Shakhov (pongo... in Node.js — русскоговорящее сообщество
Попов Алексей
да, ты понимаешь, там боль самого API или я что-то не понимаю, там, чтобы нормально страницу вывести с категориями и товарами надо кучу запросов выполнить к API, плюс у товаров свои модификации и т.д.
У апи есть подписка на уведомление об изменении товара?
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
Yury Golikov
А если только на запись читать из crm, а для операций чтения хранить кеш в локальной базе?
Это костыль. Всегда может случится так что прочитал - было всё хорошо, а в следующую секунду менеджер удалил
источник

ПА

Попов Алексей... in Node.js — русскоговорящее сообщество
Yury Golikov
А если только на запись читать из crm, а для операций чтения хранить кеш в локальной базе?
я вот и думаю, читать данные с CRM, ложить их в redis например, на сайте выводить из редиса, паралельно процесс работает непрерывно этот кеш обновляет, т.к. я не могу найти в API вообще данные о том, какой товар изменен или удален
источник