ایجاد کلاس های پایتون از فایل protobuf

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/02/15
  • تعداد بازدید: 11

برای استفاده از gRPC در یک برنامه پایتون، پس از تعریف پیام‌ها و سرویس‌ها در فایل .proto باید کدهای مورد نیاز به زبان پایتون تولید شوند. این مرحله شامل تولید کلاس‌های پیام، کدهای سریال‌سازی، و واسط‌های لازم برای کلاینت و سرور gRPC است. ابزار رسمی برای این کار protoc است که به کمک پلاگین‌های gRPC برای پایتون اجرا می‌شود.

پیش‌نیازها

قبل از تولید کد، اطمینان حاصل کنید که بسته‌های زیر نصب شده‌اند:

pip install grpcio grpcio-tools

ساختار فایل پروتو

فرض کنید فایل user.proto به شکل زیر است:

syntax = "proto3";

package user;

message UserRequest {
  int32 id = 1;
}

message UserResponse {
  int32 id = 1;
  string name = 2;
  string email = 3;
}

service UserService {
  rpc GetUser(UserRequest) returns (UserResponse);
}

دستور تولید کد پایتون

برای تولید کد لازم، از دستور زیر استفاده می‌کنیم:

python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. user.proto

توضیح گزینه‌ها:

  • -I. مسیر فایل‌های .proto را مشخص می‌کند (در اینجا دایرکتوری جاری)

  • --python_out=. فایل‌های پیام (message classes) را تولید می‌کند

  • --grpc_python_out=. فایل‌های مربوط به gRPC (stubها و سرور) را تولید می‌کند

نتیجه اجرای دستور بالا

دو فایل ایجاد می‌شوند:

  • user_pb2.py
    حاوی کلاس‌های پیام و روش‌های serialization/deserialization

  • user_pb2_grpc.py
    حاوی stubهای کلاینت و کلاس پایه سرور

ساختار فایل user_pb2.py (نمونه)

class UserRequest(proto.Message):
    id = proto.Field(proto.INT32, number=1)

class UserResponse(proto.Message):
    id = proto.Field(proto.INT32, number=1)
    name = proto.Field(proto.STRING, number=2)
    email = proto.Field(proto.STRING, number=3)

ساختار فایل user_pb2_grpc.py (نمونه)

class UserServiceStub(object):
    def GetUser(self, request, context):
        # این متد به‌صورت خودکار توسط gRPC پر می‌شود
        pass

class UserServiceServicer(object):
    def GetUser(self, request, context):
        # پیاده‌سازی متد سمت سرور
        raise NotImplementedError('Method not implemented!')

جدول وظایف فایل‌های تولید شده

فایل وظیفه
*_pb2.py تعریف کلاس‌های پیام
*_pb2_grpc.py تعریف واسط‌های gRPC، Stub و Servicer
*_pb2_grpc.add_* اتصال سرویس به سرور gRPC
Stub رابط کلاینت برای RPC
Servicer کلاس پایه برای پیاده‌سازی سرور

فرایند تولید کد از فایل .proto، پل ارتباطی بین تعریف قراردادی gRPC و پیاده‌سازی واقعی در زبان مقصد است. در پایتون این فرایند به‌طور کامل با protoc و grpcio-tools انجام می‌شود و به توسعه‌دهندگان امکان می‌دهد که تمرکز خود را بر پیاده‌سازی منطق تجاری قرار دهند بدون نگرانی از جزئیات انتقال داده.

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است می توانید اولین نفر باشید