ホームページ >バックエンド開発 >Python チュートリアル >こんにちは開発コミュニティ! pydanticrpcの導入:Protobufファイルを手動で書き込むことなく、GRPC&Connect RPCサービスをビルドします

こんにちは開発コミュニティ! pydanticrpcの導入:Protobufファイルを手動で書き込むことなく、GRPC&Connect RPCサービスをビルドします

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-30 10:11:08312ブラウズ

Hello DEV Community! Introducing PydanticRPC: Build gRPC & Connect RPC Services Without Manually Writing Protobuf Files

これは私の最初の開発投稿であり、PydanticモデルからのGRPCおよび接続RPCサービスの作成を自動化するPythonライブラリであるPydanticrpc を導入します。 もうマニュアルはありません。プロットファイルの作成!

github -pydanticrpc


概要

Python REST APIは、多くの場合、FastapiやFlaskなどのフレームワークを活用します。 ただし、最適化されたデータ転送またはスキーマファーストアプローチの場合、GRPCまたはConnect RPCは説得力のある選択肢です。 従来のRPCワークフローには、.roprotoファイル、コード生成(

またはprotocを使用)、および統合を定義することが含まれます。 buf

pydanticrpc

これを合理化します。 PydanticモデルでRPCデータ構造を定義します。 pydanticrpcは、protobuf定義を動的に生成し、サーバーを起動します

pydanticrpc?
​​

とは何ですか 主要な機能:

自動化されたProtobuf生成:
    PythonクラスとPydanticモデルから.protoファイルを直接作成します。
  • ダイナミックコード生成:
  • を使用してサーバー/クライアントスタブを生成し、Pythonクラスをシームレスに統合します。
  • 幅広いサポート: GRPC、GRPC-WEB(Sonora経由)、Connect RPC(Connecpyを介して)、および非同期(非同期)操作と互換性があります。 grpcio-tools
  • 基本的に:「Pydanticモデルを使用してPythonクラスを定義し、すぐにRPCサービスを取得します。プロトファイルは必要ありません!」
  • インストール

Pypi経由でインストール:


使用法:GRPCサービスの作成

<code class="language-bash">pip install pydantic-rpc</code>
を使用してGRPCサーバーを作成します。

同期の例

エイリアスpydantic_rpc.Server

その方法を公開します。 非同期例
<code class="language-python"># server.py
from pydantic_rpc import Server, Message

class HelloRequest(Message):
    name: str

class HelloReply(Message):
    message: str

class Greeter:
    def say_hello(self, request: HelloRequest) -> HelloReply:
        return HelloReply(message=f"Hello, {request.name}!")

if __name__ == "__main__":
    server = Server()
    server.run(Greeter())</code>
Asyncサーバーの場合、

Messageを使用します pydantic.BaseModel GreeterServer().run(Greeter())はコルーチンで、イベントループ内で実行されます。

使用法:レスポンスストリーミングAsyncIOServer

<code class="language-python">import asyncio
from pydantic_rpc import AsyncIOServer, Message

class HelloRequest(Message):
    name: str

class HelloReply(Message):
    message: str

class Greeter:
    async def say_hello(self, request: HelloRequest) -> HelloReply:
        return HelloReply(message=f"Hello, {request.name}!")

if __name__ == "__main__":
    server = AsyncIOServer()
    loop = asyncio.get_event_loop()
    loop.run_until_complete(server.run(Greeter()))</code>
pydanticrpcは、サーバーのストリーミング応答をサポートしています(現在はAsync grpcのみ)。 以下の例では、オリンピックのトリビアの

を使用して、標準的な方法とストリーミング方法の両方を紹介します。 server.run(Greeter())


は統一されたRPCです。

はサーバーストリーミングであり、結果を段階的に生成します。 pydanticrpcは、両方を定義する.protoファイルを生成し、非同期GRPCサーバーを起動します。

使用法:Connect RPC Serviceの作成

pydantic_aiASGIアプリでRPCを接続するためにconnecpyと統合:

<code class="language-bash">pip install pydantic-rpc</code>
pydanticは検証を処理します。 これを既存のASGIフレームワーク(Fastapi、Starlette)に統合します。

app

使用法:grpc-webサービスの作成

WSGIまたはASGIアプリケーションでGRPC-WEBをサーブ:

共存GRPC-WEBとRESTエンドポイント

<code class="language-python"># server.py
from pydantic_rpc import Server, Message

class HelloRequest(Message):
    name: str

class HelloReply(Message):
    message: str

class Greeter:
    def say_hello(self, request: HelloRequest) -> HelloReply:
        return HelloReply(message=f"Hello, {request.name}!")

if __name__ == "__main__":
    server = Server()
    server.run(Greeter())</code>

結論


pydanticrpcは、サーバーストリーミングを含むPydanticモデルからGRPC、GRPC-WEB、およびRPC開発を簡素化します。 詳細については、pydanticrpc githubリポジトリをご覧ください。 フィードバック歓迎!

以上がこんにちは開発コミュニティ! pydanticrpcの導入:Protobufファイルを手動で書き込むことなく、GRPC&Connect RPCサービスをビルドしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。