Back to questions
Junior — Middle
84
Каким образом gRPC обрабатывает и передает статусы ответов?
Companies where asked
Notix Games
Answer from AI
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 передает статусы через код и сообщение, позволяя клиенту точно понять результат вызова.