Skip to content

03.06.カスタムルーティング

Akinori Yamada edited this page Aug 21, 2014 · 3 revisions

カスタムルーティングのドキュメントです。

ルーティングの利用ケース

AeromockのDSLを利用したURL Rewriteによって独自のルーティングが可能になります。カスタムルーティングは以下のようなケースで有効活用できます。

  • 実際のURLとテンプレートのパスが一致していない場合。パスが一致していないとAeromockで動作確認する際、リンクを踏んでの画面遷移ができないため、その差異をカスタムルーティングによって吸収する。
  • 複数データファイルを利用する場合、_dataidというパラメータを違うリクエストパラメータがで置き換えたいような場合。
  • リクエストドメインやユーザーエージェントによってテンプレートを切り替える。PCやスマートフォンによって描画するテンプレートファイルが違うような場合。

routing.groovy

プロジェクトルートに routing.groovy という名前で作成します。routing.groovyでは、AeromockのDSLを利用したURL Rewriteによって独自のルーティングが可能になります。

serverディレクティブ

ルーティングDSLのルート要素はroutingにし、その内部にserverディレクティブを定義します。基本はlocalhostだけの設定ですが、複数設定することでVirtualHostと同じことができるようになります。

localhostのみの場合

routing {
    server "localhost", {
        // TODO
    }
}

VirtualHostで複数ドメインの場合

routing {
    server "local.pc.example.com", {
        // TODO
    }

    server "local.sp.example.com", {
        // TODO
    }
}

rewriteディレクティブ

rewriteディレクティブでは正規表現にマッチしたURLのRewriteを行います。

  • 第1引数: マッチさせたい正規表現
  • 第2引数: マッチした場合に実行されるコールバック。コールバック引数から正規表現で抜き出した文字列を取得することが出来る。コールバック内で最後に評価された文字列がRewrite結果となる。

/help/help-top.doというリクエストを/help/topというURLに書き換えてみましょう。

  • 1st Step .doを除去します。正規表現で.do以外の文字列を抜き出します。抜き出した文字列はコールバック引数である_で参照可能です。_は抜き出した文字列を_1, _2, ... _nという変数で持っています。つまり、.do以外の文字列は_._1で参照できるわけです。
  • 2nd Step .doが除去されて/help/help-topになるので、ここからtopを抜き出します。第1引数は/help/help-topをにマッチする正規表現で、topを抜き出すことができます。つまり、rewrite結果は/help/topとなります。文字列内に$を使って変数を埋め込んでいますが、これはGroovyのGStringの表現です。
routing {
    server "localhost", {
        // 1st Step
        rewrite(/^(.+)\.do$/), { _ ->
            _._1
        }

        // 2nd Step
        rewrite(/^\/help\/help-([A-Z]+)/), { _ ->
            "/help/${_._1}"
        }
    }
}

ビルトイン変数

routing.groovy内では、Aeromockで定義されているビルトイン変数を参照することができます。

Clone this wiki locally