-
Notifications
You must be signed in to change notification settings - Fork 11
03.06.カスタムルーティング
Akinori Yamada edited this page Aug 21, 2014
·
3 revisions
カスタムルーティングのドキュメントです。
AeromockのDSLを利用したURL Rewriteによって独自のルーティングが可能になります。カスタムルーティングは以下のようなケースで有効活用できます。
- 実際のURLとテンプレートのパスが一致していない場合。パスが一致していないとAeromockで動作確認する際、リンクを踏んでの画面遷移ができないため、その差異をカスタムルーティングによって吸収する。
- 複数データファイルを利用する場合、
_dataid
というパラメータを違うリクエストパラメータがで置き換えたいような場合。 - リクエストドメインやユーザーエージェントによってテンプレートを切り替える。PCやスマートフォンによって描画するテンプレートファイルが違うような場合。
プロジェクトルートに routing.groovy という名前で作成します。routing.groovyでは、AeromockのDSLを利用したURL Rewriteによって独自のルーティングが可能になります。
ルーティングDSLのルート要素はrouting
にし、その内部にserverディレクティブを定義します。基本はlocalhostだけの設定ですが、複数設定することでVirtualHostと同じことができるようになります。
routing {
server "localhost", {
// TODO
}
}
routing {
server "local.pc.example.com", {
// TODO
}
server "local.sp.example.com", {
// TODO
}
}
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で定義されているビルトイン変数を参照することができます。