-
Notifications
You must be signed in to change notification settings - Fork 0
/
middleware.slide
51 lines (35 loc) · 1.4 KB
/
middleware.slide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Making Middleware Manageable
Golang Dorset
Dan Richards
Software Engineer, Lush Digital
https://danmrichards.com
https://github.com/danmrichards
* Intro to HTTP Handlers
Go has a great set of packages in the standard library, one of which is `net/http`.
It allows us to define handler functions which respond to HTTP requests, like so:
func helloHandler() http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello Golang Dorset!"))
})
}
* Why Middleware?
- Web applications often need to perform actions before or after requests are processed
- Often these actions need to be carried out for multiple resources of the application
- This can result in code duplication and poor seperation of concerns
* Middleware in Go
Go allows us to define a middleware as a simple function that takes a http handler, runs some code, and then executes the original handler:
func checkAPIKey(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Header.Get(apiKeyHeader) != apiKey {
w.WriteHeader(http.StatusUnauthorized)
w.Write([]byte("Unauthorised"))
return
}
h.ServeHTTP(w, r)
})
}
* Demo Time
To the code!
* Companion Code
All the code from this talk can be found on the Golang Dorset Github
https://github.com/golangdorset/making-middleware-manageable