我有一个.proto
文件:
// Protocol Buffers Language version
syntax = "proto3";
package my_package;
// -----------------Cart service-----------------
service CartService {
rpc AddItem(AddItemRequest) returns (AddItemResponse) {}
}
message CartItem {
string product_id = 1;
int32 quantity = 2;
}
message AddItemRequest {
string user_id = 1;
CartItem item = 2;
}
message AddItemResponse {
string user_id = 1;
}
在我的AddItem
方法中,我想返回一个自定义错误,例如cart_not_found
:
class CartService(my_package_pb2_grpc.CartServiceServicer):
def AddItem(self, request, context):
context.set_code(StatusCode.CART_NOT_FOUND)
context.set_details('Cart Not Found!')
return context
上面的代码不起作用,因为gRPC
状态代码仅限于一些基本列表。如何在gRPC
中返回自定义错误?
EDIT-1:
我已经看到了设置机器可读代码的示例,如下所示:
context.set_code(grpc.StatusCode.INTERNAL)
context.set_details('cart_not_found')
return context
但这有其自身的局限性,我无法为错误或任何其他自定义键设置说明。
另一种方法是在您收到的每条消息中都返回错误,如下所示:
message AddItemResponse {
string user_id = 1;
Error error = 2;
}
message Error {
string code = 1;
string message = 2;
}
此实现有一个缺点,即服务需要检查错误是否存在,然后处理错误,否则将处理响应。
答案 0 :(得分:0)
您可以在尾随的元数据中返回自定义KV对。
答案 1 :(得分:0)