Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
gRPCとgrpc-gatewayを フル活用したweb開発
Search
Go Sagawa
December 04, 2019
Programming
0
75
gRPCとgrpc-gatewayを フル活用したweb開発
Go Sagawa
December 04, 2019
Tweet
Share
More Decks by Go Sagawa
See All by Go Sagawa
GoのWebアプリ開発での DB関連トラブル
gosagawa
0
69
Errors Handling Talks at GopherCon2019
gosagawa
1
550
バッチとゴルーチンあるある
gosagawa
0
250
レガシーシステムあるある.pdf
gosagawa
0
370
Goを会社に導入して半年
gosagawa
0
110
20180228自社勉強会_プッシュ送信周りをマスターする
gosagawa
0
820
Other Decks in Programming
See All in Programming
CSC509 Lecture 14
javiergs
PRO
0
220
開発に寄りそう自動テストの実現
goyoki
1
900
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
130
大体よく分かるscala.collection.immutable.HashMap ~ Compressed Hash-Array Mapped Prefix-tree (CHAMP) ~
matsu_chara
2
220
生成AIを利用するだけでなく、投資できる組織へ
pospome
1
320
Microservices Platforms: When Team Topologies Meets Microservices Patterns
cer
PRO
1
1k
dotfiles 式年遷宮 令和最新版
masawada
1
760
TestingOsaka6_Ozono
o3
0
140
Integrating WordPress and Symfony
alexandresalome
0
150
tparseでgo testの出力を見やすくする
utgwkk
1
210
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
320
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.6k
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
Fireside Chat
paigeccino
41
3.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
Into the Great Unknown - MozCon
thekraken
40
2.2k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.6k
Mobile First: as difficult as doing things right
swwweet
225
10k
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を使うとより強力に なる