我有django REST API,我正试图将其转换为gRPC。我按照Django grpc framework guide创建了以下文件:
class Organization(models.Model):
Org_name = models.CharField(max_length=100, unique=True, primary_key=True, db_index=True)
Address = models.CharField(max_length=100)
Description = models.CharField(max_length=500)
Number_of_emp = models.IntegerField()
package org;
import "google/protobuf/empty.proto";
service OrganizationController {
rpc List(OrganizationListRequest) returns (Organizations) {}
rpc Create(Organization) returns (Organization) {}
rpc Retrieve(OrganizationRetrieveRequest) returns (Organization) {}
rpc Update(Organization) returns (Organization) {}
rpc Destroy(Organization) returns (google.protobuf.Empty) {}
}
message Organization {
string Org_name = 1;
string Address = 2;
string Description = 3;
int32 Number_of_emp = 4;
}
message OrganizationListRequest {
}
message OrganizationRetrieveRequest {
string Org_name = 1;
}
message Organizations {
repeated Organization organization = 1;
}
注意,Organizations是org.proto中声明的一条消息,用于返回一个列表或一个对象数组
class OrganizationService(generics.ModelService):
queryset = Organization.objects.all()
serializer_class = OrganizationSerializerProto
class OrganizationSerializerProto(proto_serializers.ModelProtoSerializer):
class Meta:
model = Organization
proto_class = org_pb2.Organization
fields = '__all__'
问题我想使用rpc List(OrganizationListRequest) returns (Organizations) {}
请求获取数据库中所有组织的列表。但是,无论何时调用rpc,都会出现以下错误:
request error: "error": "13 INTERNAL: Failed to serialize response!"(我使用BloomRPC gui客户端发出请求)
但是,如果我将rpc List(OrganizationListRequest) returns (Organizations) {}
更改为rpc List(OrganizationListRequest) returns (stream Organization) {}
请求返回正常工作,我得到一个包含AllObject的响应流。我不希望返回流中的数据,我希望它返回一个对象数组,但是使用message Organizations {repeated Organization organization = 1;}
会抛出上述错误。
我犯错误了吗?我到处找,但找不到这个错误。或者不可能进行这样的RPC调用吗
这是服务器端协议编解码器错误。这通常是因为:
Organizations
而不是Organization
)李>gRPC Python将记录导致
Failed to serialize response!
错误的异常。可以通过logging.basicConfig(level=logging.INFO)
显式启用Python日志记录。以下是到日志记录行的链接:https://github.com/grpc/grpc/blob/bed585bdcb5cbbbfb407b4e869665d405b04adca/src/python/grpcio/grpc/_common.py#L88
如果在上述检查之后,错误仍然存在,您能否创建一个复制案例并发送到https://github.com/grpc/grpc/issues
相关问题 更多 >
编程相关推荐