服务器返回值自定义,在pythongrpc服务器中可以返回自定义错误吗?

本文讨论了在gRPC服务中如何返回自定义错误。传统的gRPC状态代码有限,作者尝试了两种实现方式:一是通过设置上下文的机器可读错误代码和详细信息,但这种方式限制了错误描述的丰富性;二是直接在响应消息中包含错误字段,虽然能提供更详细的错误信息,但增加了服务端处理的复杂性。文章旨在寻找在gRPC中优雅地处理自定义错误的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个.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:

^{pr2}$

以上代码不起作用,因为gRPC状态代码仅限于一些基本列表。如何在gRPC中返回自定义错误?在

编辑-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;

}

这种实现有一个缺点,即服务需要检查错误是否存在,然后处理错误,否则处理响应。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值