Slide 1

Slide 1 text

3JOH.JEEMFXBSF ͷجૅ -JTQ.FFU6QQSFTFOUFECZ4IJCVZBMJTQ !@BZBUP@Q$ZCP[V4UBSUVQT *OD

Slide 2

Slide 2 text

͋΍ͽʔ !@BZBUP@Q $ZCP[V4UBSUVQT *OD +BQBO$MPKVSJBOT "ENJO

Slide 3

Slide 3 text

3JOHͷίϯηϓτ Handler Request Response Middleware ࠓ೔͸.JEEMFXBSFͷ͓࿩

Slide 4

Slide 4 text

3JOH.JEEMFXBSF

Slide 5

Slide 5 text

3JOH.JEEMFXBSF (defn wrap-member [handler] (fn [req] (->> (get-in req [:params :member-id]) find-member (assoc req :member) handler))) ߴ֊ؔ਺ ϋϯυϥΛड͚औΔ ϦΫΤετΛऔΔؔ਺Λฦ͢ ৽͍͠ϋϯυϥ

Slide 6

Slide 6 text

(defn wrap-member [handler] (fn [req] (->> (get-in req [:params :member-id]) find-member (assoc req :member) handler))) 3JOH.JEEMFXBSF ߴ֊ؔ਺ ϋϯυϥΛड͚औΔ ϦΫΤετΛऔΔؔ਺Λฦ͢ ৽͍͠ϋϯυϥ ϋϯυϥ ϦΫΤετ ؔ਺

Slide 7

Slide 7 text

.JEEMFXBSFΛద༻͢Δ (defn wrap-answer [handler] (fn [req] (handler (assoc req :ans 42)))) (defn handler [req] (res/response (get req :ans))) XSBQBOTXFSϛυϧ΢ΣΞΛIBOEMFS΁ద༻͢Δ (def app (wrap-answer handler))

Slide 8

Slide 8 text

.JEEMFXBSFΛద༻͢Δ (let [handler (fn [req] (res/response (get req :ans))] (fn [req] (handler (assoc req :ans 42)))) XSBQBOTXFSϛυϧ΢ΣΞΛIBOEMFS΁ద༻͢Δ (fn [req] (res/response (get (assoc req :ans 42) :ans)))

Slide 9

Slide 9 text

ϦΫΤετͷྲྀΕ Handler Middleware A Middleware B Middleware C Request Response

Slide 10

Slide 10 text

ϦΫΤετͷྲྀΕ Handler Middleware A Middleware B Middleware C Request Response .JEEMFXBSF$͕ϦΫΤετϚοϓΛॲཧ͠ ৽ͨͳϦΫΤετϚοϓΛ࣍ͷϋϯυϥ΁౉͢

Slide 11

Slide 11 text

ϦΫΤετͷྲྀΕ Handler Middleware A Middleware B Middleware C Request Response .JEEMFXBSF#͕ϦΫΤετϚοϓΛॲཧ͠ ৽ͨͳϦΫΤετϚοϓΛ࣍ͷϋϯυϥ΁౉͢

Slide 12

Slide 12 text

ϦΫΤετͷྲྀΕ Handler Middleware A Middleware B Middleware C Request Response .JEEMFXBSF"͕ϦΫΤετϚοϓΛॲཧ͠ ৽ͨͳϦΫΤετϚοϓΛ࣍ͷϋϯυϥ΁౉͢

Slide 13

Slide 13 text

ϦΫΤετͷྲྀΕ Handler Middleware A Middleware B Middleware C Request Response )BOEMFS͕ϦΫΤετϚοϓΛॲཧ͠ ϨεϙϯεϚοϓΛੜ੒ฦ٫͢Δ

Slide 14

Slide 14 text

ϦΫΤετͷྲྀΕ Handler Middleware A Middleware B Middleware C Request Response .JEEMFXBSF"͕ϨεϙϯεϚοϓΛॲཧ͠ ৽ͨͳϨεϙϯεϚοϓΛฦ٫͢Δ

Slide 15

Slide 15 text

ϦΫΤετͷྲྀΕ Handler Middleware A Middleware B Middleware C Request Response .JEEMFXBSF#͕ϨεϙϯεϚοϓΛॲཧ͠ ৽ͨͳϨεϙϯεϚοϓΛฦ٫͢Δ

Slide 16

Slide 16 text

ϦΫΤετͷྲྀΕ Handler Middleware A Middleware B Middleware C Request Response .JEEMFXBSF$͕ϨεϙϯεϚοϓΛॲཧ͠ ৽ͨͳϨεϙϯεϚοϓΛฦ٫͢Δ

Slide 17

Slide 17 text

ϛυϧ΢ΣΞ͸ͲͷΑ͏ʹಇ͔͘ ઌʹద༻ͨ͠ϛυϧ΢ΣΞ͕಺ଆʹͳΔ ֎ଆͷϛυϧ΢ΣΞ͕ઌʹϦΫΤετϚοϓΛ
 ॲཧͰ͖Δ ಺ଆͷϛυϧ΢ΣΞ͕ઌʹϨεϙϯεϚοϓΛ
 ॲཧͰ͖Δ

Slide 18

Slide 18 text

3JOH.JEEMFXBSF ࣮૷ύλʔϯ

Slide 19

Slide 19 text

࣮૷ύλʔϯ ϦΫΤετϚοϓߋ৽ύλʔϯ ϨεϙϯεϚοϓߋ৽ύλʔϯ ৚݅෼ذύλʔϯ Ϋϩʔδϟ ดแ ύλʔϯ

Slide 20

Slide 20 text

ϦΫΤετϚοϓߋ৽ύλʔϯ (defn wrap-member [handler] (fn [req] (->> (get-in req [:params :member-id]) find-member (assoc req :member) handler))) ϦΫΤετϚοϓΛߋ৽ͯ͠ϋϯυϥ΁౉͢ Ұൠతʹϋϯυϥ΁౉͢લͷڞ௨ॲཧΛ୲͏ ϦΫΤετϚοϓʹ௥Ճ

Slide 21

Slide 21 text

(defn wrap-html [handler] (fn [req] (-> (handler req) (res/content-type "text/html")))) ϨεϙϯεϚοϓߋ৽ύλʔϯ ϋϯυϥͷฦ٫ͨ͠ϨεϙϯεϚοϓΛߋ৽͢Δ Ϩεϙϯεͷ.*.&λΠϓΛ
 ౷Ұͨ͠Γ͢Δͷʹศར ϨεϙϯεϚοϓʹ௥Ճ

Slide 22

Slide 22 text

(defn wrap-auth [handler] (fn [req] (if (authenticated? req) (handler req) (auth-error-handler req)))) ৚݅෼ذύλʔϯ ࣮ߦ͢ΔϋϯυϥΛ৚݅ʹΑͬͯมߋ͢Δ ϧʔςΟϯά΍ೝূೝՄͷॲཧΛ͢Δ
 ڞ௨ॲཧͰར༻͞ΕΔ ৚݅Ͱ࣮ߦର৅Λมߋ

Slide 23

Slide 23 text

(defn wrap-fib [handler] (let [memoized-fib (memoize fib)] (fn [req] (let [n (->long (get-in req [:params :n]))] (-> (assoc req :fib-num (memoized-fib n)) handler))))) Ϋϩʔδϟ ดแ ύλʔϯ ؀ڥΛด͡ࠐΊͯ৽͍͠ϋϯυϥΛฦ٫͢Δ ॏ͍ॲཧͳͲΛϝϞԽͨ͠ΓɺԿ౓΋ܭࢉ͢Δҙຯ ͕ͳ͍΋ͷΛด͡ࠐΊͯ͠·͑Δ ฦ٫͢Δؔ਺ʹด͡ࠐΊΔ

Slide 24

Slide 24 text

ى͜Γ͕ͪͳ໰୊

Slide 25

Slide 25 text

໰୊ (defn show-user [req] (let [user-id (get-in req [:params :user-id]) db (:db req) (-> (find-user-by-id db user-id) res/ok
 res/html)))

Slide 26

Slide 26 text

໰୊ڊେͳϦΫΤετϚοϓ ϛυϧ΢ΣΞΛཔΓ͗ͯ͢ؾ͕෇͍ͨΒ
 ϦΫΤετϚοϓ͕େ͖͘ͳΓ͍͗ͯ͢Δ (defn show-user [req] (let [user-id (get-in req [:params :user-id]) db (:db req) (-> (find-user-by-id db user-id) res/ok
 res/html)))

Slide 27

Slide 27 text

໰୊શͯݟ͑ͯ͠·͏ ϛυϧ΢ΣΞͰϦΫΤετϚοϓʹӨڹΛ༩͑ Ε͹શͯͷϋϯυϥ͔Βத਎͕ݟ͑ͯ͠·͏ (defn show-user [req] (let [user-id (get-in req [:params :user-id]) db (:db req) (-> (find-user-by-id db user-id) res/ok
 res/html)))

Slide 28

Slide 28 text

໰୊ (def app (-> handler wrap-keyword-params wrap-nested-params wrap-multipart-params wrap-params))

Slide 29

Slide 29 text

໰୊ӅΕͨґଘؔ܎ खಈͰॱ൪Λܾఆ͠ͳ͚Ε͹ͳΒͳ͍ ґଘؔ܎ͷଘࡏ͕໨ʹݟ͑ͳ͍ (def app (-> handler wrap-keyword-params wrap-nested-params wrap-multipart-params wrap-params)) ґଘؔ܎͕ੜ·Ε͍ͯΔ

Slide 30

Slide 30 text

·ͱΊ

Slide 31

Slide 31 text

·ͱΊ 3JOH.JEEMFXBSF͸୯७ͳߴ֊ؔ਺ ࢓૊Έ͸୯७͚ͩͲڧྗ طʹ࠶ར༻ՄೳͳϥΠϒϥϦ͕୔ࢁ͋Δ ͨͩ͠ɺཚ༻͢ΔͱԿॲ͔ΒԿ͕ೖ͖͍ͬͯͯ Δͷ͔෼͔Βͳ͘ͳΔͷͰରࡦ͕ඞཁ