Slim3 Source Code Reading No12 Router
Slim3 Source Code Reading #12 - ChugokuGTUG
に参加してきました!
今回も@ttyokoyama 殿と2人だったので、まったりと進みました。
まぁ、他の方が参加していても、まったり進むのですがw
T.Yokoyamaのブログ: Slim3 Source Code Reading #12
今回はRouterです。
Google Code Archive - Long-term storage for Google Code Project Hosting.
スマートなURLを実現するための機能ですね。
URLマッピング - Slim3 日本語サイト(非公式)
読んでいて気になった点は以下の2つ。
- 静的ファイルの判定で、拡張子が"s3"で始まらないことという条件がある
- 全キャッチのプレースホルダー(*xxx)の使い道
1つ目の静的ファイルの判定ですが、RouterImpl#isStatic()にあります。
Google Code Archive - Long-term storage for Google Code Project Hosting.
public boolean isStatic(String path) throws NullPointerException {
if (path == null) {
throw new NullPointerException("The path parameter is null.");
}
if (path.startsWith("/_ah/")) {
return false;
}
String extension = RequestUtil.getExtension(path);
return extension != null && !extension.startsWith("s3");
}
RouterImplはデフォルトのRouterです。URLマッピングをする時は、このクラスを継承して条件を追加します。
if (path.startsWith("/_ah/"))は管理用のページをはじいています。"s3"は"Slim3"の略だと思われるので、拡張子の部分の最初が"s3"になるような機能があるのかな・・・?
ちょっと、拡張子が"s3"で始まるようなパターンは思いつかなかったので、なぞ。
2つ目の全キャッチのプレースホルダーですが、公式の使い方を見ると、こんな感じ。
"*"を指定すると、問答無用でそこから最後までの文字列がパラメータになるようです。
public class AppRouter extends RouterImpl {public AppRouter() {
addRouting(
"/{app}/find/*path",
"/{app}/find?path={path}");
}
}
どんなパターンの時に使うのか?を考えたのですが、こんな時かな?と出てきたのが以下。
ホテル一覧検索みたいな階層が動的に変わるけど、1つのコントローラでさばきたい時。
URLが"/都道府県","都道府県/市町村"みたいな感じです。
2つぐらいなら、それぞれ書いた方が良さそうだけど、たくさんあると書くのが面倒なので、"*"使った方が楽そうかなと。
他にも必要になるパターンがあるのだろうけど、これぐらいしか思いつかなかったorz
そして、今回でひとまずSlim3 Source Code Readingは完結となりました。Slim3 Source Code Readingのおかげで分からなかったら、とりあえず中身を読むようになり、読む力がそこそこ上がった気がします!また、GAEへの理解度も上がりました。
機会があれば、他のライブラリも読んでみようかなーと思いながら、twitter4jのソースをDLしたりしていますw