April 2022
Beginner to intermediate
464 pages
6h 44m
Japanese
「10.5 Middlewareパターンを使って処理を分離する 」では個々のハンドラーとは別に、サーバー側の共通的な関心事を組み込む仕組みとしてMiddlewareパターンを紹介しました。本節ではクライアント側の視点からリトライやロギング・認証認可といったリクエスト共通の関心事を、個々のリクエストの実装と分離する方法について紹介します。
基本になるのはGoのHTTPクライアントである http.Clinet の Transport フィールドです。
net/http のHTTPクライアントのフィールドtype Client struct {
Transport RoundTripper
CheckRedirect func(req *Request, via []*Request) error
Jar CookieJar
Timeout time.Duration
}
この Transport フィールドは以下の RoundTripper インタフェースになっています。
type RoundTripper interface {
RoundTrip(*Request) (*Response, error)
}
RoundTrip() のシグネチャを見るとわかるように、 RoundTrip() はリクエスト (*http.Request) を受け取って、レスポンス (*http.Response) を返却するメソッドが定義されており、実際のHTTP通信を行う役割を担っています。
RoundTripper インタフェースに値を指定せず nil でリクエストした場合、
Read now
Unlock full access