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
Go Sagawa
December 04, 2019
Programming
0
73
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
66
Errors Handling Talks at GopherCon2019
gosagawa
1
530
バッチとゴルーチンあるある
gosagawa
0
240
レガシーシステムあるある.pdf
gosagawa
0
360
Goを会社に導入して半年
gosagawa
0
110
20180228自社勉強会_プッシュ送信周りをマスターする
gosagawa
0
810
Other Decks in Programming
See All in Programming
Flutterで備える!Accessibility Nutrition Labels完全ガイド
yuukiw00w
0
140
技術同人誌をMCP Serverにしてみた
74th
1
550
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
220
Rubyでやりたい駆動開発 / Ruby driven development
chobishiba
1
530
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
250
A2A プロトコルを試してみる
azukiazusa1
2
1.3k
WebViewの現在地 - SwiftUI時代のWebKit - / The Current State Of WebView
marcy731
0
110
NPOでのDevinの活用
codeforeveryone
0
710
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
480
なんとなくわかった気になるブロックテーマ入門/contents.nagoya 2025 6.28
chiilog
1
260
5つのアンチパターンから学ぶLT設計
narihara
1
140
来たるべき 8.0 に備えて React 19 新機能と React Router 固有機能の取捨選択とすり合わせを考える
oukayuka
2
890
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
694
190k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Agile that works and the tools we love
rasmusluckow
329
21k
GraphQLとの向き合い方2022年版
quramy
49
14k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Building Applications with DynamoDB
mza
95
6.5k
Bash Introduction
62gerente
614
210k
Automating Front-end Workflow
addyosmani
1370
200k
BBQ
matthewcrist
89
9.7k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
17
950
Docker and Python
trallard
44
3.5k
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を使うとより強力に なる