Это так же просто, как
(def all-routes (concat api-routes site-routes))
Объяснение начинается здесь https://github.com/pedestal/pedestal/blob/master/guides/documentation/service-routing.md#defining-route-tables указано, что
Таблица маршрутов - это просто структура данных; в нашем случае это последовательность карт.
команда pedestal называет эту последовательность карт форму таблицы маршрутов как подробный формат, и они разрабатывают краткий формат таблицы маршрутов, который мы предоставляем defroute
. Затем defroute
преобразует наш краткий формат в подробный.
Вы можете проверить сами в ответе
;; here we supply a terse route format to defroutes
> (defroutes routes
[[["/" {:get home-page}
["/hello" {:get hello-world}]]]])
;;=> #'routes
;; then we pretty print the verbose route format
> (pprint routes)
;;=>
({:path-parts [""],
:path-params [],
:interceptors
[{:name :mavbozo-pedestal.core/home-page,
:enter
#object[io.pedestal.interceptor$eval7317$fn__7318$fn__7319 0x95d91f4 "io.pedestal.interceptor$eval7317$fn__7318$fn__7319@95d91f4"],
:leave nil,
:error nil}],
:path "/",
:method :get,
:path-re #"/\Q\E",
:route-name :mavbozo-pedestal.core/home-page}
{:path-parts ["" "hello"],
:path-params [],
:interceptors
[{:name :mavbozo-pedestal.core/hello-world,
:enter
#object[io.pedestal.interceptor$eval7317$fn__7318$fn__7319 0x4a168461 "io.pedestal.interceptor$eval7317$fn__7318$fn__7319@4a168461"],
:leave nil,
:error nil}],
:path "/hello",
:method :get,
:path-re #"/\Qhello\E",
:route-name :mavbozo-pedestal.core/hello-world})
Итак, поскольку маршрут пьедестала - это просто последовательность карт, мы можем легко комбинировать несколько непересекающихся маршрутов с помощью concat
.
Это то, что мне нравится в одном из принципов clojure, которому следует команда пьедестала: общее манипулирование данными, которое в данном случае подробное отформатированная таблица маршрутов представляет собой просто карту - обычную структуру данных clojure, которую можно проверить. и управляются с помощью обычных функций управления структурой данных clojure.core, таких как concat
. Даже краткий формат также является простой структурой данных закрытия, и ее можно легко проверять и манипулировать теми же средствами.
03.11.2015