Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[OLD] Evans: more expressive universal gRPC client

ktr
November 11, 2017

[OLD] Evans: more expressive universal gRPC client

ktr

November 11, 2017
Tweet

More Decks by ktr

Other Decks in Technology

Transcript

  1. #alt_0x09 ktr0731 / ktr_0731 Evans more expressive universal gRPC client

  2. $ whoami @ktr_0731 / ktr0731 s123 プリンセス・プリンシパル

  3. Evans more expressive universal gRPC client #alt_0x09 ktr0731 / ktr_0731

  4. Evans more expressive universal gRPC client #alt_0x09 ktr0731 / ktr_0731

  5. gRPC?

  6. client/server が透過的に通信できるシステムを 簡単に構築するための RPC フレームワーク

  7. gRPC Remote Procedure Calls, of course! https://grpc.io/faq/

  8. define API schema generate client/server code Implement server logic

  9. define API schema generate client/server code Implement server logic api.proto

    (Protocol Buffers)
  10. define API schema generate client/server code Implement server logic api.pb.go

    (generated Go source)
  11. define API schema generate client/server code Implement server logic main.go

    (server)
  12. define API schema generate client/server code Implement server logic main.go

    (client)
  13. define API schema generate client/server code Implement server logic client

    output
  14. client/server 間のインターフェースを自動生成

  15. client/server 間のインターフェースを自動生成 = API の仕様を (ある程度) 反映できる

  16. Go だと色々なミドルウェア (interceptor) が使える

  17. Unary Client/Server Streaming Bidirectional Streaming

  18. Unary Client/Server Streaming Bidirectional Streaming = Goodbye WebSocket

  19. インターフェースの自動生成 Interceptor が使える 複数の RPC 方式

  20. インターフェースの自動生成 Interceptor が使える 複数の RPC 方式 べんり

  21. Demerits

  22. HTTP/2 がまだまだ新しい技術 = LB やツール群が充実していない

  23. gRPC のテストの問題 Curl 等で気軽にテストできなくてつらい

  24. None
  25. None
  26. None
  27. None
  28. interactive mode command-line mode

  29. command-line mode stdin や --file option で入力を選択できる JSON 形式の出力 スクリプトに組み込みやすい

  30. わざわざスクリプトに書きたくない時 補完ないとしんどい時 複数の RPC を試したい時にべんり interactive mode

  31. demo

  32. 1. REPL を起動する (c-bata/go-prompt) 2. proto ファイルの Unmarshal (golang/protobuf) 3.

    message のフィールドを入力させる 4. 動的に message を組み立てる (jhump/protoreflect) 5. RPC
  33. Streaming RPC TLS での通信 Map 型 ✏ reflection-server への対応 ✏

    バイナリファイルの扱い
  34. Issue / PR are welcome! https://github.com/ktr0731/evans

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