SiNBLOG

140文字に入らないことを、極稀に書くBlog

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