Upgrade to Pro — share decks privately, control downloads, hide ads and more …

http.RoundTripper Tips

Naoya.i
November 13, 2021

http.RoundTripper Tips

"今日から使えるhttp.RoundTripper Tips" at Go Conference 2021 Autumn

Naoya.i

November 13, 2021
Tweet

More Decks by Naoya.i

Other Decks in Programming

Transcript

  1. 今日から使えるhttp.RoundTripper Tips

  2. 池田 直弥(いけだ なおや) 自己紹介 Nao_Mk2 2019年 Retty入社 技術的にはバックエンド寄りが好き 仕事ではフロントエンドもインフラもやります ふりかえりは大好き

    $ go version go version go1.17.2 darwin/amd64 今回のスライドの動作確認バージョン
  3. エンジニア募集中! 3 ITで新たな食体験を提供していく「 Retty」のプロダ クト開発に携わるバックエンドエンジニアを募集し ます。 マイクロサービス化、新規事業など一緒に Goで開 発しませんか。 Go

    Conferenceの発表で盛り込めなかった話や 残念ながら採択されなかったプロポーザルの話、 Go Conferenceに参加してみての感想戦、 Retty におけるGoでのプロダクト開発など、ざっくばらん にお話いたします!
  4. http.RoundTripperの役割 (c *Client) Do(req *Request) send(ireq *Request, rt RoundTripper, deadline

    time.Time) net/http/client.go (t *Transport) RoundTrip(req *Request) net/http/roundtrip.go (t *Transport) roundTrip(req *Request) net/http/transport.go (t *Transport) dialConn(ctx context.Context, cm connectMethod) type RoundTripper interface { RoundTrip(*Request) (*Response, error) } http.clientの通信は実質RoundTripperが担う
  5. インタフェースなので扱いやすい! インタフェースの実装で好きな処理を埋め込める APMツールのエージェントもRoundTripperを活かしている https://github.com/DataDog/dd-trace-go/blob/v1/contrib/net/http/roundtripper.go ちょっとした実装でとっても便利!

  6. 便利Tips 3選 https://github.com/Nao-Mk2/go-roundtripper-tips

  7. ロギング https://github.com/Nao-Mk2/go-roundtripper-tips/blob/main/logging/logging.go 通信内容をお手軽にロギング

  8. 使い所 • エラー調査に役立つ外部通信ログ ◦ Request / Response Bodyを記録 ▪ Bodyは直接操作せずクローンして扱う

    ▪ セキュリティ的に記録してOKな内容かは考慮
  9. モック https://github.com/Nao-Mk2/go-roundtripper-tips/blob/main/mocking/mocking.go 通信しないモックが簡単

  10. • 通信しないダミー実装 ◦ 任意の値を返すダミーでモックしながら開発 • ユニットテストのモック 使い所

  11. リトライ https://github.com/Nao-Mk2/go-roundtripper-tips/blob/main/retrying/retrying.go 任意のリトライ機構が簡単

  12. • シンプルなリトライ • Exponential Backoff 使い所 ステータスコードのみを見てハンドリングする RoundTripperインタフェースのコメントにResponse Bodyを 解釈すべきではないと記載がある

  13. http.RoundTripperを活かして 楽しいGo Life!