clojure-russia

Работа и релокейт: #jobs-rus | #clojure-russia-offtop Телеграм-чат https://t.me/clojure_ru
misha 2018-08-27T04:48:42.000100Z

@dottedmag а что ты потом с этой внешней мапой делаешь? трансформируешь в кложурную внутреннюю? если да, то сразу трансформируй (set/rename-keys или че там), и потом по внутренней православной спеке проверяй. проверять спекой не так дешево, что ты прям сэкономил бы трансформацию, если бы внешней спекой чекнул сначала

misha 2018-08-27T04:49:47.000100Z

еще вариант walk/keywordize-keys сначала, а потом у же (s/keys :req-un ...), потом трансформация, потом (s/keys :req ...)

misha 2018-08-27T04:58:12.000100Z

kirill.salykin 2018-08-27T06:40:14.000100Z

Может это тоже подойдёт? https://github.com/funcool/struct

heroinme 2018-08-27T07:21:58.000100Z

@kirill.salykin Спасибо за ссылку. Я только на днях думал начать пилить нечто подобное.

2018-08-27T07:51:29.000100Z

есть еще spec-tools - https://github.com/metosin/spec-tools

dottedmag 2018-08-27T08:16:23.000100Z

@kirill.salykin Спасибо.

dottedmag 2018-08-27T08:16:45.000100Z

"Since struct is a young project there may be some API breakage." [funcool/struct "1.3.0"] эээ?

dottedmag 2018-08-27T08:16:59.000100Z

Каждый раз будут мажорную версию менять?

dottedmag 2018-08-27T08:17:45.000100Z

@misha Мне надо оба слоя валидировать: первый на границе системы, чтобы не принимать лажу, второй внутри, чтобы проверять инварианты.

dottedmag 2018-08-27T08:18:31.000100Z

Непринятие лажи по жёстким критериям важно, так как система чем-то похожа на блокчейн: несколько узлов принимают ченджсеты и строят из них идентичное состояние.

dottedmag 2018-08-27T08:18:55.000100Z

Узлы на разных языках, так как это клиенты для разных платформ.

akond 2018-08-27T10:23:33.000100Z

@dottedmag а схема-то подошла?

misha 2018-08-27T12:11:09.000100Z

@dottedmag пример спеки-то подошел? :kappa:

guliy 2018-08-27T12:29:45.000100Z

ИМХО, после спеки - схему уже как-то не хочется, но для некоторых случаев это пока самый адекватрый вариант. Мы сейчас пытаемся жить и с тем и с другим ввиду специфичности стека. В итоге как устроено у нас: Все query в нашу api мы проверяем схемой, там все просто, схемы хватает за глаза и она работает из коробки в нашем веб-сервере. А вот все, что приходит в body (post put) уже более интересные вещи, там могут быть довольно сложные валидаторы, которые в схеме фиг опишешь без костылей и тут приходит на помощь спека. Так вот, для таких запросов у нас цепочка интерцепторов в которыой слачала корексятся body, а потом накладывается спека для валидации. Коерсить можно хоть spec-tools хоть spec-coerce, это уже на любителя. Втрая либа сильно проще и занимается исключительно коекцией.

dottedmag 2018-08-27T12:32:12.000200Z

@akond Когда совершу следующий подход к снаряду - попробую и схему, и struct.

dottedmag 2018-08-27T12:32:38.000100Z

@misha Это был модельный пример для того, чтобы выявить неадекватность спеки для задачи.

dottedmag 2018-08-27T12:34:10.000100Z

Вариант с :external/* интересный, но в нём всё равно нужно ручками коэрсию делать дальше.

misha 2018-08-27T16:51:56.000100Z

ну спека - про валидацию, а не трансформацию/коэрсию

dottedmag 2018-08-27T17:17:43.000200Z

Спасибо, кэп!

dottedmag 2018-08-27T17:17:45.000100Z

> И есть ли, чем валидировать внешние данные и приводить их в приличный вид?

guliy 2018-08-27T19:29:32.000100Z

Самое простое! Легко дописывается чего не хватает. https://github.com/wilkerlucio/spec-coerce