首頁 > 後端開發 > Python教學 > 你好開發社區!介紹PydanticRPC:構建GRPC並連接RPC服務,而無需手動編寫Protobuf文件

你好開發社區!介紹PydanticRPC:構建GRPC並連接RPC服務,而無需手動編寫Protobuf文件

Linda Hamilton
發布: 2025-01-30 10:11:08
原創
307 人瀏覽過

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

這是我的首屆開發帖子,介紹了pydanticrpc ,它是一個自動創建GRPC並從Pydantic Models連接RPC服務的Python庫。 沒有更多的手冊.proto文件創建! >

github -pydanticrpc


概述 Python REST API經常利用FastApi或Flask等框架。 但是,對於優化的數據傳輸或架構優先方法,GRPC或Connect RPC是令人信服的替代方案。 傳統的RPC工作流程涉及定義.proto文件,代碼生成(使用

>或

)和集成 - 一個過程通常很麻煩。 protocbuf> pydanticrpc 簡化了這一點。 使用Pydantic模型定義RPC數據結構; Pydanticrpc動態生成Protobuf定義並啟動服務器。 >

什麼是pydanticrpc?


>關鍵功能:

自動化的Protobuf生成:

直接從您的Python類和Pydantic模型創建.proto文件。
  • >>動態代碼生成:>使用
  • >生成服務器/客戶端並集成了您的Python類。
  • 廣泛的支持:與GRPC,GRPC-WEB兼容(通過Sonora),Connect RPC(通過Connecpy)和異步(Asyncio)操作,包括服務器流量方法。 grpcio-tools
  • 本質上是:“用pydantic模型定義Python類,並立即獲得RPC服務 - 不需要.proto文件!”
  • >
  • 安裝

>通過PYPI安裝:

用法:創建GRPC服務

>

>使用
<code class="language-bash">pip install pydantic-rpc</code>
登入後複製
登入後複製
創建GRPC服務器。

>同步示例

別名pydantic_rpc.Server

揭示其方法。

生成.proto文件並啟動GRPC服務器(默認情況下為LocalHost:50051)。

異步示例
<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>
登入後複製
登入後複製

對於異步服務器,使用Messagepydantic.BaseModel> Greeter Server().run(Greeter())

是一個coroutine,在事件循環中運行。

用法:響應流AsyncIOServer

PydanticRPC
<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>
登入後複製
>支持服務器流響應(當前僅是異步GRPC)。 下面的示例使用了奧運瑣事,展示了標準方法和流媒體方法:

server.run(Greeter())


是一單元rpc;

是服務器流,從而逐漸產生結果。 pydanticrpc生成一個.proto文件,以啟動異步GRPC服務器。 >

>用法:創建連接RPC服務

pydantic_ai>在ASGI應用中與Connect RPC的連接集成:

pydantic處理驗證。 將此集成到您現有的ASGI框架(Fastapi,starlette)中。
<code class="language-bash">pip install pydantic-rpc</code>
登入後複製
登入後複製

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

> PydanticRPC簡化了GRPC,GRPC-WEB和連接來自Pydantic模型的RPC開發,包括服務器流。 探索Pydanticrpc GitHub存儲庫以獲取更多詳細信息。 歡迎反饋!

以上是你好開發社區!介紹PydanticRPC:構建GRPC並連接RPC服務,而無需手動編寫Protobuf文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板