Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
MiddlewarePattern.pdf
Search
ayato
September 11, 2015
Programming
0
160
MiddlewarePattern.pdf
ayato
September 11, 2015
Tweet
Share
More Decks by ayato
See All by ayato
Clojureという言語が私逹にもたらしたもの
ayato0211
5
2.9k
3年間考え続けてきたWebアプリケーションにおけるテストの話
ayato0211
3
220
Re:REPL-Driven Development
ayato0211
3
1.2k
Meta Template Engine
ayato0211
2
970
超変換! Hiccup data structure!!
ayato0211
2
540
About Integrant
ayato0211
0
470
Muscle Assert
ayato0211
0
210
Clojureを用いたWebアプリケーション開発
ayato0211
2
3k
翻訳にまつわるエトセトラ
ayato0211
6
1.2k
Other Decks in Programming
See All in Programming
What you can do with Ruby on WebAssembly
kateinoigakukun
0
170
ドメイン駆動設計を実践するために必要なもの
bikisuke
4
330
Modular Monolith Go Server with GraphQL Federation + gRPC
110y
1
590
長期運用プロダクトの開発速度を維持し続けるためのリファクタリング実践例
wataruss
8
2.7k
Prompt Cachingは本当に効果的なのか検証してみた.pdf
ttnyt8701
0
530
XStateでReactに秩序を与えたい
gizm000
0
730
Hono・Prisma・AWSでGeoなAPI開発
nokonoko1203
5
680
Android開発以外のAndroid開発経験の活かしどころ
konifar
2
1k
Regular Expressions, REXML, Automata Learning
makenowjust
0
220
エラーレスポンス設計から考える、0→1開発におけるGraphQLへの向き合い方
bicstone
5
1.5k
Scala におけるコンパイラエラーとの付き合い方
chencmd
2
430
『ドメイン駆動設計をはじめよう』中核の業務領域
masuda220
PRO
5
1k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
268
26k
What's new in Ruby 2.0
geeforr
340
31k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
248
20k
Why You Should Never Use an ORM
jnunemaker
PRO
53
8.9k
WebSockets: Embracing the real-time Web
robhawkes
59
7.3k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Build The Right Thing And Hit Your Dates
maggiecrowley
30
2.3k
The Invisible Customer
myddelton
119
13k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
32k
Navigating Team Friction
lara
183
13k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
326
21k
A better future with KSS
kneath
235
17k
Transcript
Middleware Pattern @_ayato_p/Cybozu Startups, Inc.
(def _ayato_p {:name "あやぴー" :lang
[:clojure :ruby :javascript] :company "Cybozu Startups, Inc."})
(def _ayato_p {:name "あやぴー" :lang
[:clojure :ruby :javascript] :company "Cybozu Startups, Inc."}) Clojure 歴、半年
Agenda Ring Ring Middleware Middleware Pattern
Ring
Ring サーバーを抽象化する仕様/デファクトスタンダード Ring Handler, Requests, Responses, Middleware 公式には
jetty のアダプタがある 最近で Ring インターフェイスを実装したものだと Immutant などがある
Ring Middleware
Ring Middleware ただの高階関数 Ring Middleware の場合、 Handler を受け取って
Request を受け取る関数を返すような書き方されてる
Ring Middleware (defn wrap-secret-key[handler secret-key] (fn [req]
(handler (assoc-in req [:params :secret-key] secret-key)))) (defn make-handler [handler] (-> handler (wrap-secret-key "This is secret!!") wrap-something wrap-anything wrap-defaults)) (app (make-handler (get-ring-handler)))
Middleware Pattern
Middleware Pattern Ring Middleware はひとつの Middleware Pattern 例 他には
Boot でも適用されている
Use case ユーザーの入力を受け取って、関数を適用するか決めたい config ファイルを使って、関数を適用するか決めたい LazySeq に適用する関数をオプションから決めたい
-> Composable な関数を作りたい!!
Conclusion Composable な関数を書くお供に Middleware Pattern を活用しよう
Enjoy Clojure