トップレベルのハンドラーは常に1つだけになります。結局のところ、ある概念レベルに複数のハンドラーがある場合でも、アプリは特定のリクエストにどのハンドラーを適用するかを決定する必要があるため、選択を行うルーチンは次のようになります。トップレベルのハンドラー。つまり、簡単な答えは、リクエストを調べて、アプリ内のいくつかのハンドラーの中から適切なハンドラーに渡す関数を提供する必要があるということです。その関数は、与えられるハンドラーrun-jetty
(または同等のもの)です。
通常、Ring + Compojureを使用すると、特定のURIを処理するための基本的な(「内部」)ハンドラーと、ミドルウェアとして実装されたいくつかの特別な目的のハンドラー(たとえば、404)があります。前者はフォームで定義される傾向がありdefroutes
、後者は高階関数です。
ミドルウェアハンドラーは、要求を確認した後、応答をすぐに返すか、ラップアラウンドされたハンドラーに委任するかを自分で決定します。ルートベースの「内部」ハンドラーは適切なURIをnil
要求され、要求がそれらに意味をなさないことを示すために戻るオプションがあります(その時点で、残りのルートベースのハンドラーが試行nil
されます。最終応答は通常、ミドルウェアの一部によって生成され、場合によっては404を返します。
私はここにCompojureに関する長い答えを書きました; おそらく、Compojureのルートベースのハンドラー定義のコツをつかむのに役立つかもしれません。