Heim > Backend-Entwicklung > Python-Tutorial > Hallo Dev Community! Einführung pydanticRPC: Bauen Sie GRPC auf und verbinden RPC -Dienste, ohne manuelles Schreiben von Protobuf -Dateien zu schreiben

Hallo Dev Community! Einführung pydanticRPC: Bauen Sie GRPC auf und verbinden RPC -Dienste, ohne manuelles Schreiben von Protobuf -Dateien zu schreiben

Linda Hamilton
Freigeben: 2025-01-30 10:11:08
Original
307 Leute haben es durchsucht

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

Dies ist mein erster Dev -Post, der pydanticRPC einführt, eine Python -Bibliothek, die die Erstellung von GRPC und die Verbindung von RPC -Diensten aus pydantischen Modellen verbindet. Keine manuelle .Proto -Dateierstellung mehr!

github - pydanticRPC


Übersicht

Python Rest -APIs nutzen häufig Frameworks wie Fastapi oder Flask. Für eine optimierte Datenübertragung oder einen Schema-ersten-Ansatz sind GRPC oder Connect RPC jedoch überzeugende Alternativen. Herkömmliche RPC -Workflows umfassen die Definieren von .proto -Dateien, die Codegenerierung (mit

oder protoc) und die Integration - ein Prozess häufig umständlich und anspruchsvoll. buf

pydanticRPC optimiert dies. Definieren Sie Ihre RPC -Datenstrukturen mit pydantischen Modellen. PydanticRPC generiert dynamisch Protobuf -Definitionen und startet den Server.


Was ist pydanticRpc?

Schlüsselmerkmale:

  • Automatisierte Protobuferstellung: Erstellt .Proto -Dateien direkt aus Ihren Python -Klassen und pydantischen Modellen.
  • Dynamische Codegenerierung: verwendet , um Server-/Client -Stubs zu generieren und Ihre Python -Klassen nahtlos zu integrieren. grpcio-tools
  • breite Unterstützung: kompatibel mit GRPC, GRPC-Web (über Sonora), Connect RPC (über Connecpy) und asynchronen (Asyncio) Operationen, einschließlich Server-Streaming-Methoden.
im Wesentlichen: "Definieren Sie eine Python -Klasse mit pydantischen Modellen und erhalten Sie sofort einen RPC -Dienst - keine .Proto -Dateien erforderlich!"


Installation

installieren Sie über PYPI:

<code class="language-bash">pip install pydantic-rpc</code>
Nach dem Login kopieren
Nach dem Login kopieren

Verwendung: Erstellen eines GRPC -Dienstes

Verwenden Sie

, um einen GRPC -Server zu erstellen. pydantic_rpc.Server

synchrones Beispiel

<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>
Nach dem Login kopieren
Nach dem Login kopieren

aliase Message. pydantic.BaseModel enthält seine Methoden. Greeter generiert die .proto -Datei und startet einen GRPC -Server (localhost: 50051 standardmäßig). Server().run(Greeter())

Asynchrones Beispiel

Verwenden Sie für asynchrische Server

: 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>
Nach dem Login kopieren

ist eine Korutine, die in Ihrer Ereignisschleife ausgeführt wird. server.run(Greeter())


Verwendung: Antwort Streaming

pydanticRPC unterstützt Server-Streaming-Antworten (derzeit nur async gpc). Das folgende Beispiel verwendet

für olympische Trivia, wobei sowohl Standard- als auch Streaming -Methoden vorgestellt werden: pydantic_ai

<code class="language-python">import asyncio
from typing import AsyncIterator

# ... (imports and class definitions as shown in the original) ...

if __name__ == "__main__":
    s = AsyncIOServer()
    loop = asyncio.get_event_loop()
    loop.run_until_complete(s.run(OlympicsAgent()))</code>
Nach dem Login kopieren

ist ein unärer RPC; ask ist serverstreaming und ergibt inkrementell Ergebnisse. PydanticRPC generiert eine .Proto -Datei, die beides definiert wird und einen async grpc Server startet. ask_stream


Verwendung: Erstellen eines Connect RPC -Dienstes

in eine ASGI -App in eine ASGI -App mit Connecpy für Connect RPC integrieren:

<code class="language-bash">pip install pydantic-rpc</code>
Nach dem Login kopieren
Nach dem Login kopieren

pydantische Handles -Validierung. Integrieren Sie dieses app in Ihr vorhandenes ASGI -Framework (FASTAPI, STARLETTE).


Verwendung: Erstellen eines GRPC-Web-Dienstes

GRPC-Web in WSGI- oder ASGI-Anwendungen dienen:

<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>
Nach dem Login kopieren
Nach dem Login kopieren

koexistieren Grpc-Web- und REST-Endpunkte.


Schlussfolgerung

pydanticRPC vereinfacht GRPC-, GRPC-Web- und Verbindungs-RPC-Entwicklung aus pydantischen Modellen, einschließlich Server-Streaming. Entdecken Sie das pydantische Github -Repository für weitere Details. Feedback Willkommen!

Das obige ist der detaillierte Inhalt vonHallo Dev Community! Einführung pydanticRPC: Bauen Sie GRPC auf und verbinden RPC -Dienste, ohne manuelles Schreiben von Protobuf -Dateien zu schreiben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage