Sobes.tech
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 передает статусы через код и сообщение, позволяя клиенту точно понять результат вызова.