Compojure - выполнение HTTP-вызова при достижении маршрута - PullRequest
0 голосов
/ 09 мая 2018

Я новичок в Closure и пробую Ring и Compojure. Я хочу сделать HTTP-запрос, когда пользователь переходит на маршрут (к стороннему API), а затем использовать эти данные ответа в моем HTML-шаблоне. , Я знаю, что это, вероятно, очень легко осуществить, но, будучи новичком в языке и синтаксисе, я немного растерялся.

 (defroutes app
    (GET "/" request
      ; try to GET "https://third-party-api" and do something with the response
    )
 )

Каков наилучший метод и формат для этого - возможно, я здесь упускаю некоторые ключевые понятия в ожиданиях маршрутизации / ответа. Большое спасибо!

1 Ответ

0 голосов
/ 09 мая 2018

Я рекомендую библиотеку clj-http для выполнения http-запросов. Вы можете найти множество примеров на связанной странице о том, как его использовать.

Ваше использование clj-http может выглядеть примерно так:

(ns my-app.core
  (:require [clj-http.client :as client]))

...

(defn get-api-data []
  (:body (client/get "https://third-party-api" {:as :json})))

Обратите внимание, что clj-http.client/get возвращает карту, содержащую такие вещи, как код состояния ответа и заголовки.

Если вы используете опцию {:as :json} для приведения ответа в json, обязательно включите cheshire в ваш project.clj (при условии, что вы используете leiningen)

:dependencies [...
               [clj-http "3.9.0"]
               [cheshire "5.8.0"]]

Документацию по запросам и ответам на звонок можно найти здесь .

Большая часть власти в кольце - это концепция промежуточного программного обеспечения. Большинство «приятных» функций, которые вы хотели бы видеть на http-сервере, можно найти в качестве промежуточного программного обеспечения в самом кольце или других библиотеках. Например, если вы хотите, чтобы все ваши ответы по умолчанию сериализировались как json, вы можете использовать ring-json


Если вы пытаетесь получить что-то, что «просто работает», быстро запустить и запустить несколько примеров, Luminus может быть полезным. Это курируемая коллекция библиотек, которые полезны для большинства веб-серверов. (Отказ от ответственности: я только минимально экспериментировал с Luminus, решив более четко понять мои зависимости).

Я лично использую compojure sweet в начале большинства моих проектов веб-сервисов, он включает в себя некоторые более приятные функции маршрутизации (включая параметры пути) и удобный пользовательский интерфейс для тестирования ваших конечных точек. К сожалению, он использует свою собственную форму деструктуризации и включает в себя немного больше магии и «просто необходимо знать», чем я хотел бы, но я еще не нашел что-то, что работает лучше для меня.

...