2025年8月25日月曜日

Haskell入門P368 ルーティング、本体

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 件のコメント:

コメントを投稿