[OLD] Evans: more expressive universal gRPC client
by
ktr
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
#alt_0x09 ktr0731 / ktr_0731 Evans more expressive universal gRPC client
Slide 2
Slide 2 text
$ whoami @ktr_0731 / ktr0731 s123 プリンセス・プリンシパル
Slide 3
Slide 3 text
Evans more expressive universal gRPC client #alt_0x09 ktr0731 / ktr_0731
Slide 4
Slide 4 text
Evans more expressive universal gRPC client #alt_0x09 ktr0731 / ktr_0731
Slide 5
Slide 5 text
gRPC?
Slide 6
Slide 6 text
client/server が透過的に通信できるシステムを 簡単に構築するための RPC フレームワーク
Slide 7
Slide 7 text
gRPC Remote Procedure Calls, of course! https://grpc.io/faq/
Slide 8
Slide 8 text
define API schema generate client/server code Implement server logic
Slide 9
Slide 9 text
define API schema generate client/server code Implement server logic api.proto (Protocol Buffers)
Slide 10
Slide 10 text
define API schema generate client/server code Implement server logic api.pb.go (generated Go source)
Slide 11
Slide 11 text
define API schema generate client/server code Implement server logic main.go (server)
Slide 12
Slide 12 text
define API schema generate client/server code Implement server logic main.go (client)
Slide 13
Slide 13 text
define API schema generate client/server code Implement server logic client output
Slide 14
Slide 14 text
client/server 間のインターフェースを自動生成
Slide 15
Slide 15 text
client/server 間のインターフェースを自動生成 = API の仕様を (ある程度) 反映できる
Slide 16
Slide 16 text
Go だと色々なミドルウェア (interceptor) が使える
Slide 17
Slide 17 text
Unary Client/Server Streaming Bidirectional Streaming
Slide 18
Slide 18 text
Unary Client/Server Streaming Bidirectional Streaming = Goodbye WebSocket
Slide 19
Slide 19 text
インターフェースの自動生成 Interceptor が使える 複数の RPC 方式
Slide 20
Slide 20 text
インターフェースの自動生成 Interceptor が使える 複数の RPC 方式 べんり
Slide 21
Slide 21 text
Demerits
Slide 22
Slide 22 text
HTTP/2 がまだまだ新しい技術 = LB やツール群が充実していない
Slide 23
Slide 23 text
gRPC のテストの問題 Curl 等で気軽にテストできなくてつらい
Slide 24
Slide 24 text
No content
Slide 25
Slide 25 text
No content
Slide 26
Slide 26 text
No content
Slide 27
Slide 27 text
No content
Slide 28
Slide 28 text
interactive mode command-line mode
Slide 29
Slide 29 text
command-line mode stdin や --file option で入力を選択できる JSON 形式の出力 スクリプトに組み込みやすい
Slide 30
Slide 30 text
わざわざスクリプトに書きたくない時 補完ないとしんどい時 複数の RPC を試したい時にべんり interactive mode
Slide 31
Slide 31 text
demo
Slide 32
Slide 32 text
1. REPL を起動する (c-bata/go-prompt) 2. proto ファイルの Unmarshal (golang/protobuf) 3. message のフィールドを入力させる 4. 動的に message を組み立てる (jhump/protoreflect) 5. RPC
Slide 33
Slide 33 text
Streaming RPC TLS での通信 Map 型 ✏ reflection-server への対応 ✏ バイナリファイルの扱い
Slide 34
Slide 34 text
Issue / PR are welcome! https://github.com/ktr0731/evans
Slide 35
Slide 35 text
引用 • 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 の元に使用しています