Documentation
¶
Overview ¶
Example (Chain) ¶
package main
import (
"fmt"
"net/http"
)
func mid1() Middleware {
return func(tr http.RoundTripper) http.RoundTripper {
return RoundTripFunc(func(req *http.Request) (resp *http.Response, err error) {
fmt.Println(1)
defer func() {
fmt.Println("mid1 defer")
}()
return tr.RoundTrip(req)
})
}
}
func mid2() Middleware {
return func(tr http.RoundTripper) http.RoundTripper {
return RoundTripFunc(func(req *http.Request) (resp *http.Response, err error) {
fmt.Println(2)
defer func() {
fmt.Println("mid2 defer")
}()
return tr.RoundTrip(req)
})
}
}
func tr() http.RoundTripper {
return RoundTripFunc(func(req *http.Request) (resp *http.Response, err error) {
fmt.Println("tr")
w := &http.Response{
StatusCode: 200,
}
return w, nil
})
}
func main() {
tr := chain(tr(), []Middleware{mid1(), mid2()}...)
client := http.Client{
Transport: tr,
}
req, _ := http.NewRequest(http.MethodGet, "https://demo.com/test", nil)
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
panic("status code error")
}
}
Output: 1 2 tr mid2 defer mid1 defer
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Middleware ¶
type Middleware func(http.RoundTripper) http.RoundTripper
Middleware is HTTP Client transport middleware.
func AccessLog ¶
func AccessLog(logger *slog.Logger) Middleware
func Debug ¶
func Debug() Middleware
func Mock ¶
func Mock(suite []MockSuite) Middleware
Mock quickly define HTTP Response for mock RoundTriper
func Trace ¶
func Trace() Middleware
type MockSuite ¶
type MockSuite struct {
URI string
MatchBody map[string]any
MatchQuery map[string]any
ResponseBody string
StatusCode int
Header http.Header
Error error
ResponseInterceptor func(response *http.Response, body []byte) *http.Response
}
MockSuite is test set for http client
type Option ¶
type Option func(c *Client)
func WithMiddleware ¶
func WithMiddleware(middleware ...Middleware) Option
func WithTimeout ¶
func WithTransport ¶
func WithTransport(transport http.RoundTripper) Option
type RoundTripFunc ¶
RoundTripFunc is a holder function to make the process of creating middleware a bit easier without requiring the consumer to implement the RoundTripper interface.
Click to show internal directories.
Click to hide internal directories.