Sobes.tech
Junior — Middle
111

Каким образом gRPC обрабатывает и передает статусы ответов?

Сұралған компаниялар
Notix Games

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