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
gRPCとgrpc-gatewayを フル活用したweb開発
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Go Sagawa
December 04, 2019
Programming
79
0
Share
gRPCとgrpc-gatewayを フル活用したweb開発
Go Sagawa
December 04, 2019
More Decks by Go Sagawa
See All by Go Sagawa
GoのWebアプリ開発での DB関連トラブル
gosagawa
0
71
Errors Handling Talks at GopherCon2019
gosagawa
1
550
バッチとゴルーチンあるある
gosagawa
0
260
レガシーシステムあるある.pdf
gosagawa
0
370
Goを会社に導入して半年
gosagawa
0
120
20180228自社勉強会_プッシュ送信周りをマスターする
gosagawa
0
830
Other Decks in Programming
See All in Programming
CDK Deployのための ”反響定位”
watany
4
670
Swift Concurrency Type System
inamiy
0
430
Vibe NLP for Applied NLP
inesmontani
PRO
0
300
実践CRDT
tamadeveloper
0
430
瑠璃の宝石に学ぶ技術の声の聴き方 / 【劇場版】アニメから得た学びを発表会2026 #エンジニアニメ
mazrean
0
230
実践ハーネスエンジニアリング #MOSHTech
kajitack
7
6.2k
Xdebug と IDE による デバッグ実行の仕組みを見る / Exploring-How-Debugging-Works-with-Xdebug-and-an-IDE
shin1x1
0
360
2026-03-27 #terminalnight 変数展開とコマンド展開でターミナル作業をスマートにする方法
masasuzu
0
320
ネイティブアプリとWebフロントエンドのAPI通信ラッパーにおける共通化の勘所
suguruooki
0
260
「話せることがない」を乗り越える 〜日常業務から登壇テーマをつくる思考法〜
shoheimitani
4
700
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
340
KagglerがMixSeekを触ってみた
morim
0
370
Featured
See All Featured
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
150
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
130
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
680
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
140
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
330
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
250
The untapped power of vector embeddings
frankvandijk
2
1.7k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
64
53k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Transcript
gRPCとgrpc-gatewayを フル活用したweb開発 golang.tokyo #28 Dec 4, 2019 Go Sagawa and
factory,inc. @go_sagawa
About me Go Sagawa Backend engineer and factory, inc. Smartphone
app Div Twitter : @go_sagawa
構成
今日話すこと • protoをどう作成するか • grpc-gatewayをどのように活用するか grpc-gatewayの活用方法 protoをどうやって作るか?
ケース1 機能で分ける 画面数50程のアプリに対し 大まかな機能毎に10数proto 1protoに2~8API 共通で使うものが数proto
ケース1 の問題点 クライアント側もprotoからコード生成したいが、 rpcの情報が邪 魔 上手く抽象化されず、複雑になってくる
抽象化してないもの
抽象化したもの
抽象化したもの Bは他でも使うの で共通に
抽象化したもの × 書き換えが多く発生 × Bが共通で使われない × 別のprotoでC’が作れられる × 名前がかぶる ×
依存関係がわかりにくい
解決するために protoの時点で 構造化を意識してみよう!
protoを上手く構造化する
protoを上手く構造化する
改良したproto構成 画面数50程のアプリに対し 大まかな機能毎にrpc用protoと画面protoが10数 モデルprotoが50程 rpc以外はクライアント側も利用してコード生成 画面protoは極力モデルを利用する
その他のtips フォーマッタとしてclang-format を活用する
その他のtips nilになる可能性のあるユーザ定義メッセージを明示 する
その他のtips grpc-gatewayで ゼロ値も出力するように設定しておく 参考:【grpc-gateway】0, false, nullなどの値をJSON出力対象にする Https://qiita.com/cpp0302/items/2450ee93e7c5fbec28a7
その他のtips レビューをクライアント側も交えて行う →全APIモックを作り切ってから実装に入っている Backend iOS android
共通proto protoで全て表現できるのは良いですが、スキーマからAPI仕様がしれなくなるのでアン チパターンなのではと思ってます。 共通のパラメータはgRPCのメタデータでやり取りするのが良いと思います。
grpc-gatewayの活用法 単にprotobufがjsonになってデバッグしやすくなる 事がメリットではない!
grpc-gatewayの活用法 ・net.httpを利用しており、同じようにミドルウェアが かける。
grpc-gatewayの活用法 ・ログイン以外のAPIを暗号化および複合する ・メンテナンス状態にして全APIをシャットアウトする ・バージョンを判断して、強制アップデートを促す ・外部サービス(広告サービスや各種ツール)から呼ばれる、通信方式がJSONでないリ クエストの対処 ・ヘルスチェック用のAPI提供
まとめ • protoは上手く構造化して抽象化するとより活用 しやすい • grpc-gatewayはmiddlewareを使うとより強力に なる