Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
http.RoundTripper Tips
Search
Naoya.i
November 13, 2021
Programming
0
730
http.RoundTripper Tips
"今日から使えるhttp.RoundTripper Tips" at Go Conference 2021 Autumn
Naoya.i
November 13, 2021
Tweet
Share
More Decks by Naoya.i
See All by Naoya.i
Retty × LeSSの取り組みと工夫 / Large-Scale Scrum in Retty
nao_mk2
2
1.6k
モブとソロを織り交ぜてハイアウトプットなチーム開発 / High output with swarming and solo work
nao_mk2
2
2.7k
問題解決会になったふりかえりからの脱却 / Beyond gloomy retrospective
nao_mk2
0
1.5k
チームの力を高めるモブワークを始めよう! / How To Mob Work
nao_mk2
1
2.7k
Other Decks in Programming
See All in Programming
複数アプリケーションを育てていくための共通化戦略
irof
9
3.5k
機械学習って何? 5分で解説頑張ってみる
kuroneko2828
0
180
Devinで実践する!AIエージェントと協働する開発組織の作り方
masahiro_nishimi
6
2.8k
型付け力を強化するための Hoogle のすゝめ / Boosting Your Type Mastery with Hoogle
guvalif
1
250
Perplexity Slack Botを作ってAI活用を進めた話 / AI Engineering Summit プレイベント
n3xem
0
420
少数精鋭エンジニアがフルスタック力を磨く理由 -そしてAI時代へ-
rebase_engineering
0
150
"使いづらい" をリバースエンジニアリングする UI の読み解き方
rebase_engineering
0
130
Blueskyのプラグインを作ってみた
hakkadaikon
1
390
バリデーションライブラリ徹底比較
nayuta999999
1
570
ドメインモデリングにおける抽象の役割、tagless-finalによるDSL構築、そして型安全な最適化
knih
3
720
Prism.parseで 300本以上あるエンドポイントに 接続できる権限の一覧表を作ってみた
hatsu38
1
100
PT AI без купюр
v0lka
0
210
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
42
2.4k
Being A Developer After 40
akosma
90
590k
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.7k
How STYLIGHT went responsive
nonsquared
100
5.6k
Bash Introduction
62gerente
614
210k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.7k
Site-Speed That Sticks
csswizardry
9
620
Documentation Writing (for coders)
carmenintech
71
4.8k
RailsConf 2023
tenderlove
30
1.1k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Fireside Chat
paigeccino
37
3.5k
KATA
mclloyd
29
14k
Transcript
今日から使えるhttp.RoundTripper Tips
池田 直弥(いけだ なおや) 自己紹介 Nao_Mk2 2019年 Retty入社 技術的にはバックエンド寄りが好き 仕事ではフロントエンドもインフラもやります ふりかえりは大好き
$ go version go version go1.17.2 darwin/amd64 今回のスライドの動作確認バージョン
エンジニア募集中! 3 ITで新たな食体験を提供していく「 Retty」のプロダ クト開発に携わるバックエンドエンジニアを募集し ます。 マイクロサービス化、新規事業など一緒に Goで開 発しませんか。 Go
Conferenceの発表で盛り込めなかった話や 残念ながら採択されなかったプロポーザルの話、 Go Conferenceに参加してみての感想戦、 Retty におけるGoでのプロダクト開発など、ざっくばらん にお話いたします!
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が担う
インタフェースなので扱いやすい! インタフェースの実装で好きな処理を埋め込める APMツールのエージェントもRoundTripperを活かしている https://github.com/DataDog/dd-trace-go/blob/v1/contrib/net/http/roundtripper.go ちょっとした実装でとっても便利!
便利Tips 3選 https://github.com/Nao-Mk2/go-roundtripper-tips
ロギング https://github.com/Nao-Mk2/go-roundtripper-tips/blob/main/logging/logging.go 通信内容をお手軽にロギング
使い所 • エラー調査に役立つ外部通信ログ ◦ Request / Response Bodyを記録 ▪ Bodyは直接操作せずクローンして扱う
▪ セキュリティ的に記録してOKな内容かは考慮
モック https://github.com/Nao-Mk2/go-roundtripper-tips/blob/main/mocking/mocking.go 通信しないモックが簡単
• 通信しないダミー実装 ◦ 任意の値を返すダミーでモックしながら開発 • ユニットテストのモック 使い所
リトライ https://github.com/Nao-Mk2/go-roundtripper-tips/blob/main/retrying/retrying.go 任意のリトライ機構が簡単
• シンプルなリトライ • Exponential Backoff 使い所 ステータスコードのみを見てハンドリングする RoundTripperインタフェースのコメントにResponse Bodyを 解釈すべきではないと記載がある
http.RoundTripperを活かして 楽しいGo Life!