Yesodチュートリアルの蛇足(2)
前回の続きを。
参考にしているチュートリアルはこちらから。
Haskell web programming
今日は2.Echoからやっていこう。
YesodはFront Controller Patternをとっている。
つまりYesodへのリクエストはひとつの入り口から入って、そこから各所に割り振られる。
その設定は、config/routesファイルに書かれている。
その中身はこんな感じ。(最後の行はチュートリアルの中で加えたルーティングのための宣言)
/static StaticR Static getStatic /auth AuthR Auth getAuth /favicon.ico FaviconR GET /robots.txt RobotsR GET / RootR GET /echo/#String EchoR GET
最後の一行を加えて保存した瞬間、自動的にコンパイルがスタート。ォオー!!(゚д゚屮)屮
そして怒られる。
Application.hs:31:1: Not in scope: `getEchoR'
なるほど、getEchoRなんか知らんと。これはHandler/Root.hsの方に実装するらしい。
チュートリアルに従ってgetEchoRを加えて保存するとちゃんと動くようになった。
ところでこのEchoプログラム、XSSなどの対策は大丈夫なのだろうか??
それが大丈夫らしい。
詳しくはここに書いてあるが、Haskellの強力な型が我々を不正な入力から守ってくれる。
入力されたStringやText型の文章は、テンプレートの所定の場所に挿入される際、Html型に型変換される。
Html型はエスケープされているので、javascriptなどのコードを実行することはできなくなる。
かくして悪意のある入力から守られる。
Yesodで使われているテンプレートの形式は、シェイクスピアにちなんだ名前が付けられている。
HTML,CSS,Javascriptのテンプレートはそれぞれ以下のような名前が付いている。
HTML | Hamlet |
CSS | Lucius |
Javascript | Julius |
templateディレクトリにあるファイルの拡張子をみると、.hamletとか.luciusとか.juliusとかついていて、それぞれがHTML,CSS,Javascriptのテンプレートに対応しているらしい。
詳しい文法などについて勉強したら、またそのうち書きますm(_ _)m