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

PyCon Kyushu 2022「Python で gRPC 入門 ~ chat を実装してみるハンズオン~」

PyCon Kyushu 2022「Python で gRPC 入門 ~ chat を実装してみるハンズオン~」

2022/1/22(土)に熊本城ホールで行われたPyCon Kyushu 2022のイベントで発表した資料です。

nisshi.dev | にっし

January 22, 2022
Tweet

More Decks by nisshi.dev | にっし

Other Decks in Programming

Transcript

  1. アジェンダ 1. プロローグ 2. 従来のREST APIの世界 3. gRPC入門 4. gRPC

    ✖ pythonでweb chatを実装してみるハンズ オン
  2. 自己紹介 nishida / Yoshikatsu Nishida ・起業準備中の学生エンジニア(B4) ・3E株式会社 R&Dユニット/インターン ・Code for

    Yamaguchi創設者, CivicTechForum 2021登壇, 山口県コロナサイト立ち上げ ・NHK高専ロボコンOB ・全日本珠算技能競技大会(そろばん)元島根県代表 ・Next.js, Nest.js, React Native, Firebase, GCP, RoR, Python ・趣味はゲーム(スマブラSP)、旅行 @nsd244 nishidayoshikatsu
  3. REST APIとは REST API(RESTful API)は、基本的に「RESTの原則」に従って設計されている APIのこと ・アドレス可能性: すべての情報が一意な URIで表現されるようにすること ・ステートレス性:

    すべてのHTTPリクエストが完全に分離している性質であること ・接続性: ある情報に「別の情報へのリンク」を含めることができること ・統一インターフェース : すべてHTTPメソッドを利用すること( GET, POST, PUT, DELETE)
  4. REST API開発における便利ツール ・design(設計): postman, stoplight, swagger ・documentation(ドキュメント管理): postman, stoplight, swagger

    ・build, debug api: postman, stoplight, swagger ・mock server: prism, MSW ※auto generate(自動生成)  code→document: ORM(prisma等)が生成, フレームワーク(django等)が生成  document→code: postman等のdocumentation toolが生成
  5. そもそもRPCって何? RPC = Remote Procedure Call(遠隔手続き呼び出し) ・あるプログラムが別のネットワーク上のプログラムを呼び出して実行すること (補足)2つのシステム間の通信パターン(Enterprise Integration Patternsより引用)

    1. File Transfer: ファイル転送でのデータ連携 2. Shared Database: データベース共有でのデータ連携 3. Remote Procedure Invocation: 別名Remote Procedure Call(RPC) 4. Messaging: 非同期を前提としたフレームワークを介してデータ連携する, Pub/Subパターン
  6. gRPCの特徴 - 複数のストリーミング通信形式を選択できる - - Unary RPC: 1つのrequestに対して1つのresponse Client Streaming

    RPC: 複数のrequestに対して1つのresponse Server Streaming RPC: 1つのrequestに対して複数のresponse Bi-directional Streaming RPC: 複数のrequestに対して複数のresponse 双方向ストリーム?  👀Websocket
  7. まとめ - gRPCの想定利用シーン - ・高速な通信(HTTP/2 + protobuf) ・スキーマファーストな開発が可能 ・さまざまな通信方式に対応 よって、

    ・Microservices間の通信をする場合 ・ネイティブアプリの開発 ・パフォーマンスが求められる場合 ・Microservicesで色々な言語を使いたい場合