Назад к вопросам
Junior — Middle
83
Каким образом gRPC обрабатывает и передает статусы ответов?
Компании, где спрашивали
Notix Games
Ответ от нейросети
sobes.tech AI
gRPC использует собственный механизм передачи статусов ответов, основанный на объекте Status. Каждый ответ gRPC содержит код статуса (например, OK, NOT_FOUND, INTERNAL и др.) и необязательное сообщение с описанием ошибки.
При завершении вызова сервер устанавливает статус, который клиент получает вместе с ответом. В Go это обычно обрабатывается через возвращаемое значение ошибки, которое можно преобразовать в gRPC статус с помощью пакета status.
Пример обработки статуса в Go:
import (
"context"
"google.golang.org/grpc/status"
"google.golang.org/grpc/codes"
)
func (s *server) SomeRPC(ctx context.Context, req *Request) (*Response, error) {
if someErrorCondition {
return nil, status.Error(codes.NotFound, "resource not found")
}
return &Response{Data: "ok"}, nil
}
Клиент может проверить статус ошибки так:
resp, err := client.SomeRPC(ctx, req)
if err != nil {
st, ok := status.FromError(err)
if ok && st.Code() == codes.NotFound {
// обработка ошибки NOT_FOUND
}
}
Таким образом, gRPC передает статусы через код и сообщение, позволяя клиенту точно понять результат вызова.