Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
[OLD] Evans: more expressive universal gRPC client
ktr
November 11, 2017
Technology
1
4.1k
[OLD] Evans: more expressive universal gRPC client
latest:
https://speakerdeck.com/ktr_0731/evans-more-expressive-grpc-client-1
ktr
November 11, 2017
Tweet
Share
More Decks by ktr
See All by ktr
Designing libraries in Go way
ktr_0731
6
1.3k
Go Modules and Proxy Walkthrough
ktr_0731
8
25k
ソフトウェアの複雑さに立ち向かう技術 / Tackling software complexity
ktr_0731
0
140
Fuzzy finder as a Go library
ktr_0731
3
4.7k
つよくてニューゲーム / NewGame++
ktr_0731
0
800
やはり俺の Go アプリケーション設計はまちがっている。 / My Go Application Design Is Wrong, As I Expected
ktr_0731
13
3.2k
GopherCon2018
ktr_0731
2
1.5k
Evans: more expressive gRPC client
ktr_0731
2
330
自作 CLI ツールのワークフローとそれを支える技術 / the workflow of my CLI tool and technologies which supports it
ktr_0731
0
1.5k
Other Decks in Technology
See All in Technology
Cloudflare Workersで動くOG画像生成器
aiji42
1
500
DNS権威サーバのクラウドサービス向けに行われた攻撃および対策 / DNS Pseudo-Random Subdomain Attack and mitigations
kazeburo
5
1.3k
PCI DSS に準拠したシステム開発
yutadayo
0
310
PHPのimmutable arrayとは
hnw
1
170
CUEとKubernetesカスタムオペレータを用いた新しいネットワークコントローラをつくってみた
hrk091
1
300
re:Invent発表のサービスを取り入れて加速する弥生のSecurity&Governance / accelerating YAYOI's Security and Governance with services announced at reinvent
yayoi_dd
0
150
JAWS-UG 横浜 #54 資料
takakuni
0
220
組織に対してSREを適用するとどうなるか
kuniim
9
3.1k
SPA・SSGでSSRのようなOGP対応!
simo123
2
160
USB PD で迎える AC アダプター大統一時代
puhitaku
2
2k
岐路に立つ若手がAmazonianの仕事術を学んできました / learning amazonian productivity hacks as a junior engineer
yayoi_dd
0
160
CSS Variable をもっと活用する / Kyoto.js 18
spring_raining
2
1.1k
Featured
See All Featured
What's new in Ruby 2.0
geeforr
336
30k
The Cult of Friendly URLs
andyhume
69
5.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
7
590
Clear Off the Table
cherdarchuk
79
290k
How to train your dragon (web standard)
notwaldorf
66
4.3k
Testing 201, or: Great Expectations
jmmastey
25
5.7k
Thoughts on Productivity
jonyablonski
49
2.7k
Scaling GitHub
holman
453
140k
KATA
mclloyd
12
9.7k
Raft: Consensus for Rubyists
vanstee
130
5.7k
Imperfection Machines: The Place of Print at Facebook
scottboms
254
12k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
2
410
Transcript
#alt_0x09 ktr0731 / ktr_0731 Evans more expressive universal gRPC client
$ whoami @ktr_0731 / ktr0731 s123 プリンセス・プリンシパル
Evans more expressive universal gRPC client #alt_0x09 ktr0731 / ktr_0731
Evans more expressive universal gRPC client #alt_0x09 ktr0731 / ktr_0731
gRPC?
client/server が透過的に通信できるシステムを 簡単に構築するための RPC フレームワーク
gRPC Remote Procedure Calls, of course! https://grpc.io/faq/
define API schema generate client/server code Implement server logic
define API schema generate client/server code Implement server logic api.proto
(Protocol Buffers)
define API schema generate client/server code Implement server logic api.pb.go
(generated Go source)
define API schema generate client/server code Implement server logic main.go
(server)
define API schema generate client/server code Implement server logic main.go
(client)
define API schema generate client/server code Implement server logic client
output
client/server 間のインターフェースを自動生成
client/server 間のインターフェースを自動生成 = API の仕様を (ある程度) 反映できる
Go だと色々なミドルウェア (interceptor) が使える
Unary Client/Server Streaming Bidirectional Streaming
Unary Client/Server Streaming Bidirectional Streaming = Goodbye WebSocket
インターフェースの自動生成 Interceptor が使える 複数の RPC 方式
インターフェースの自動生成 Interceptor が使える 複数の RPC 方式 べんり
Demerits
HTTP/2 がまだまだ新しい技術 = LB やツール群が充実していない
gRPC のテストの問題 Curl 等で気軽にテストできなくてつらい
None
None
None
None
interactive mode command-line mode
command-line mode stdin や --file option で入力を選択できる JSON 形式の出力 スクリプトに組み込みやすい
わざわざスクリプトに書きたくない時 補完ないとしんどい時 複数の RPC を試したい時にべんり interactive mode
demo
1. REPL を起動する (c-bata/go-prompt) 2. proto ファイルの Unmarshal (golang/protobuf) 3.
message のフィールドを入力させる 4. 動的に message を組み立てる (jhump/protoreflect) 5. RPC
Streaming RPC TLS での通信 Map 型 ✏ reflection-server への対応 ✏
バイナリファイルの扱い
Issue / PR are welcome! https://github.com/ktr0731/evans
引用 • Evans (DJ YOSHITAKA) - https://itunes.apple.com/jp/album/jubeat- original-soundtrack/id325295989 • helloworld.proto
- https://github.com/grpc/grpc-go より、Apache License 2.0 の元に使用しています