Download - Desenvolvendo APIs em Go usando Middlewares
![Page 1: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/1.jpg)
DesenvolvendoAPIs usandomiddlewaresElton Minetto
@eminettohttp://eltonminetto.nethttp://[email protected]
![Page 2: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/2.jpg)
Http Is The Foundation
Of The Web
![Page 3: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/3.jpg)
Um cliente manda uma request
r.Method - HTTP method (GET, POST, PUT, PATCH, DELETE etc.)r.URL.Path - Request path (/things/123)r.URL.String() - Full URLr.URL.Query() - Query parameters (q=something&p=2)r.Body - io.ReadCloser of the request body
![Page 4: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/4.jpg)
O servidor retorna uma response
type ResponseWriter interface {
Header() Header Write([]byte) (int, error) WriteHeader(int)
}
![Page 5: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/5.jpg)
Middlewares
![Page 6: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/6.jpg)
Between the request and response
Enrico Zimuel
HTTP middleware is not for your Domain work. The middleware is a path in to, and out of, the core Domain.
Paul M. Jones
Run code before and after handler code
Mat Ryer
![Page 7: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/7.jpg)
![Page 8: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/8.jpg)
Exemplos
![Page 9: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/9.jpg)
func middlewareOne(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { log.Println("Executing before middlewareOne") next.ServeHTTP(w, r) log.Println("Executing after middlewareOne") })}
![Page 10: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/10.jpg)
func middlewareTwo(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { log.Println("Executing before middlewareTwo") if r.URL.Path != "/" { return } next.ServeHTTP(w, r) log.Println("Executing after middlewareTwo") })}
func final(w http.ResponseWriter, r *http.Request) { log.Println("Executing finalHandler") w.Write([]byte("OK"))}
![Page 11: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/11.jpg)
func main() { finalHandler := http.HandlerFunc(final) http.Handle("/", middlewareOne(middlewareTwo(finalHandler))) http.ListenAndServe(":8000", nil)}
![Page 12: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/12.jpg)
https://github.com/justinas/alice
![Page 13: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/13.jpg)
func main() { finalHandler := http.HandlerFunc(final) chain := alice.New(middlewareOne, middlewareTwo).Then(finalHandler) http.ListenAndServe(":8000", chain)}
![Page 14: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/14.jpg)
package main
import ( "github.com/justinas/alice" "net/http" "planrockr")
func getCurrentSubscription(w http.ResponseWriter, r *http.Request) { ...}
func main() { chain := alice.New(planrockr.Auth, planrockr.GetUserByToken). Then(http.HandlerFunc(getCurrentSubscription)) http.ListenAndServe(":8000", chain)}
![Page 15: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/15.jpg)
package main
import ( "github.com/justinas/alice" "net/http" "planrockr")
func processEvent(next http.Handler) http.Handler { ...}
func main() { chain := alice.New(processEvent, planrockr.ValidateHookData). Then(http.HandlerFunc(planrockr.Enqueue)) http.ListenAndServe(":8000", chain)}
![Page 16: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/16.jpg)
Linkshttps://gist.github.com/eminetto/e3bab34426ac9a0b83a538a0e421bbc8
![Page 17: Desenvolvendo APIs em Go usando Middlewares](https://reader030.vdocuments.com.br/reader030/viewer/2022021420/58721f0c1a28ab3f188b7f1b/html5/thumbnails/17.jpg)
Contato@eminettohttp://eltonminetto.nethttp://[email protected]