Size: a a a

Clojure — русскоговорящее сообщество

2020 November 12

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
вот например как этот скрипт выпадет если днс икнет
❯ bb rates.bb
----- Error --------------------------------------------------------------------
Type:     clojure.lang.ExceptionInfo
Message:  curl: (6) Could not resolve host: www.cbr-xml-daily.rus

Location: /private/tmp/rates.bb:13:4

----- Context ------------------------------------------------------------------
9:         default-config)))
10:
11: (def currency-map
12:   (->
13:    (curl/get "https://www.cbr-xml-daily.rus/daily_json.js")
      ^--- curl: (6) Could not resolve host: www.cbr-xml-daily.rus

14:    :body
15:    (json/parse-string true)
16:    :Valute))
17:
18: (defn round

----- Stack trace --------------------------------------------------------------
babashka.curl/get          - <built-in>
user/parse-string          - /private/tmp/rates.bb:13:4
cheshire.core/parse-string - <built-in>
user                       - /private/tmp/rates.bb:15:4
user                       - /private/tmp/rates.bb:12:3
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Kirill Chernyshov
в любом случае
автору:
1. определение currency-map лучше вынести в функу в которой стоит обработать пару очевидных проблем: ответ не 200, в ответе не json, :Valute пустой или не валидный (тут уже на твое усмотрение, второе сложнее и дольше расписывать). Сам currency-map заполнять результатом работы этой функи что бы ошибки стреляли из единой точки входа в скрипт
2. хранить рейты в памяти перед отображением лучше в чем-то более точном чем float. ratio или decimal лучше подойдут.
3. округлять рейты только во время печати, никаких round фунок тебе не нужно.
про 2 и 3 я сразу написал
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Sergey Trofimov
а потом мы долго обсуждали, что именно нужно проверить
хттп клиент упал с ошибкой
надо проверить на это? на мой взгляд надо
как проверить? есть разные способы и критерии, например всегда проверять что ответ 200, в каких-то случаях это корректно
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Kirill Chernyshov
вот например как этот скрипт выпадет если днс икнет
❯ bb rates.bb
----- Error --------------------------------------------------------------------
Type:     clojure.lang.ExceptionInfo
Message:  curl: (6) Could not resolve host: www.cbr-xml-daily.rus

Location: /private/tmp/rates.bb:13:4

----- Context ------------------------------------------------------------------
9:         default-config)))
10:
11: (def currency-map
12:   (->
13:    (curl/get "https://www.cbr-xml-daily.rus/daily_json.js")
      ^--- curl: (6) Could not resolve host: www.cbr-xml-daily.rus

14:    :body
15:    (json/parse-string true)
16:    :Valute))
17:
18: (defn round

----- Stack trace --------------------------------------------------------------
babashka.curl/get          - <built-in>
user/parse-string          - /private/tmp/rates.bb:13:4
cheshire.core/parse-string - <built-in>
user                       - /private/tmp/rates.bb:15:4
user                       - /private/tmp/rates.bb:12:3
да
причем ты не дал советов, как вообще рекомендуешь обрабатывать исключения в данном скрипте
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
про 2 и 3 я сразу написал
да я тоже про это писал еще вчера
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Sergey Trofimov
да
причем ты не дал советов, как вообще рекомендуешь обрабатывать исключения в данном скрипте
писал же про вынести в функу
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
уже два раза можно было переписать
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Я вот тут стал фанатом graphql. Как минимум все эти 200, 300,301,400 и прочие http приколы сильно девальвируются! Рекомендую, если кто еще рестом ходит...
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Alexey Cheremisin
Я вот тут стал фанатом graphql. Как минимум все эти 200, 300,301,400 и прочие http приколы сильно девальвируются! Рекомендую, если кто еще рестом ходит...
не всегда есть GraphQL API (и не всегда в нём есть всё)
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Максимум - передаю bearer через заголовки для авторизации.. а ошибки все на стороне api
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Alexey Cheremisin
Я вот тут стал фанатом graphql. Как минимум все эти 200, 300,301,400 и прочие http приколы сильно девальвируются! Рекомендую, если кто еще рестом ходит...
Самый модный* API сейчас — одна ручка для POST, без особых статусов, 200 когда осилили, 500 когда нет. Встречаются разновидности в виде 403, но это уже вкусовщина.
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
*модный по моим наблюдениям в нескольких местах, почему-то все в пределе стремятся туда
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
вообще, непонятно, зачем сейчас держать столько сущностей как на входе, так и на выходе
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
пихнул структуру, получил структуру
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Oleg Roshchupkin
Самый модный* API сейчас — одна ручка для POST, без особых статусов, 200 когда осилили, 500 когда нет. Встречаются разновидности в виде 403, но это уже вкусовщина.
только еще 400 на неверные входные данные
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
Oleg Roshchupkin
Самый модный* API сейчас — одна ручка для POST, без особых статусов, 200 когда осилили, 500 когда нет. Встречаются разновидности в виде 403, но это уже вкусовщина.
Во-во.
Ну или ещё 401, когда jwt
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Oleg Roshchupkin
Самый модный* API сейчас — одна ручка для POST, без особых статусов, 200 когда осилили, 500 когда нет. Встречаются разновидности в виде 403, но это уже вкусовщина.
ты в курсе что сейчас почти SOAP описал? )
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Oleg Roshchupkin
уже два раза можно было переписать
переписать что? население крайнего севера?
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Kirill Chernyshov
ты в курсе что сейчас почти SOAP описал? )
разновидности могут быть любые: soap, rpc, jsonRPC, etc. Главное, что единая точка входа
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Что касается soap, то он сильно завязан на XML и представление сущностей в нем.
источник