Я не уверен, как это можно решить в Compojure, но вы можете рассмотреть возможность использования Pedestal. Эта страница предоставляет хорошее введение в процесс сопоставления маршрутов, который происходит за до вызова любых перехватчиков (замена Pedestal для промежуточного программного обеспечения Ring).
Таким образом, вы можете определить два различных набора промежуточного программного обеспечения:
(def user-intc-chain [inject-connection auth-required (body-params/body-params)] )
(def api-intc-chain [inject-connection auth-required api-params-intc] )
, а затем определить маршруты, например:
["/echo" :get (conj user-intc-chain echo-intc) ] ; a "user" route
["/alive?" :get (conj api-intc-chain alive-intc) ] ; an "api" route
В дополнение к встроенным функциям Pedestal, у меня естьколичество вспомогательных и вспомогательных функций, задокументированных здесь: https://cloojure.github.io/doc/tupelo/tupelo.pedestal.html