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
900
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
http.RoundTripper Tips
"今日から使えるhttp.RoundTripper Tips" at Go Conference 2021 Autumn
Naoya.i
November 13, 2021
More Decks by Naoya.i
See All by Naoya.i
CLIであることを活かしたGitHub Copilot CLI活用術 / GitHub Copilot CLI Pro Tips & Tricks
nao_mk2
1
1.4k
Retty × LeSSの取り組みと工夫 / Large-Scale Scrum in Retty
nao_mk2
2
1.7k
モブとソロを織り交ぜてハイアウトプットなチーム開発 / High output with swarming and solo work
nao_mk2
2
2.9k
問題解決会になったふりかえりからの脱却 / Beyond gloomy retrospective
nao_mk2
0
1.7k
チームの力を高めるモブワークを始めよう! / How To Mob Work
nao_mk2
1
3k
Other Decks in Programming
See All in Programming
yield再入門 #phpcon
o0h
PRO
0
1.2k
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
340
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.6k
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
340
MySQLとPostgreSQLって何が違うの?
akagami
0
120
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
19k
テーブルをDELETEした
yuzneri
0
150
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
260
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
230
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
490
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
440
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
0
170
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
250
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
410
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
The Limits of Empathy - UXLibs8
cassininazir
1
610
How GitHub (no longer) Works
holman
316
150k
Designing for Performance
lara
611
70k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Building an army of robots
kneath
306
46k
Prompt Engineering for Job Search
mfonobong
0
410
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!