HaskellでSpockを使ったルーティングは、慣れるまで大変そうですが、無駄のない構成という感じがします。
authHook:ログイン認証
・ctx <- getContextについて:ユーザーからのリクエスト関連情報が、ある時点で箱にはいっていて、そこから、とりだしたのがctxへいく、というイメージ。
・mUser <- fmap wrsesUser readSessionについて:オブジェクトにフィールド名を関数として適用すると、該当フィールドの要素を返す仕組みになっている(P96).
readSession :: WRAction (SessionVal UserSession):現在のリクエストに紐づく セッション情報 を取得する関数 data UserSession = UserSession { wrsesUser :: Maybe User....から、取り出しmUserに
spockApp:ルーティング
・外側のprehookは認証なし、内側はauthHookで認証 うまく階層的に配置してわかりやすい構造
・get,postの別やURLと対応するActionが並べられている。
prehook (return emptyContext) $
├─ prehook authHook $ do
│ ├─ get root
│ └─ post "new_record"
├─ post "register" ← authHook は適用されない
└─ post "login" ← authHook は適用されない
weightRecorderMiddleware:WAI ミドルウェアとして起動するための処理
・runWeightRecorder cfgで定義されているように、runSpockで呼ばれる。
ここで、spock spCfg spockApp にreturnがないが、do内のモナド計算なので不要
0 件のコメント:
コメントを投稿