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 の元に使用しています