#clojure
Вопрос:
Я очень новичок в clojure и знаком с java и PHP. Я назначил новое задание clojure для получения данных из внешнего API и выполнения некоторого процесса.
Это мой запрос API, и я попробовал его с помощью команды curl curl -i -X POST -H "Content-Type: application/json" -d "{"uid":"uId", "param":"1"}" http://localhost:8081/api/getData
результат — {«comp»:true ,»yUi»:»78.2555″,»xUi»:»4.5233″,»идентификатор»:»10″}
Я применил описанный выше процесс с помощью clojure, и мне нужно зарегистрировать эти возвращаемые значения.Не могли бы вы, пожалуйста, помочь мне сделать это с помощью clojure
Вот как я попробовал это
(defn- get-data
"api call"
[uId]
(try
(log/info (trs "start process: {0}" (str "uid" uId )))
(when-let [ui (client/post "http://localhost:8081/api/getData" {:form-params {:uid uId,:param "1"} :content-type :json })]
(log/info (trs "get data: {0} {1} {2} {3}" (:comp ui) (:yUi ui) (:xUi ui) (:id ui))))
(catch Throwable e
(log/error "api call failed:" (.getMessage e)))))
Комментарии:
1. И в чем же проблема? Пожалуйста, добавьте ваше заявление о проблеме. С первого взгляда я бы предположил, что использование данных формы вместо тела json было бы проблематичным?
2. Было бы полезно знать, какую клиентскую библиотеку HTTP вы используете, мы не можем догадаться об этом только по псевдониму пространства
client
имен. Похоже, что использованиеclient/post
в коде совсем не совпадает с даннойcurl
командой.3. Команда curl отправляет данные в формате JSON, используя заголовок типа содержимого application/json. Неясно, какой http-клиент использует post, но, как правило, использование параметров формы приведет к другому и, вероятно, неправильному методу кодирования данных и типу содержимого, чем curl. Проверьте документацию для клиентской библиотеки на наличие заклинания для отправки данных в API, которое предоставит шаблон для отправки JSON с правильным заголовком.
4. Предполагая, что вы используете
clj-http
, вы, вероятно, получаете все тело ответа в виде одной строки. Вы можете попробовать принудительно передать ответ в JSON или структуру данных Clojure с:as json
помощью или:as clojure
, как показано здесь: github.com/dakrone/clj-http#output-coercion