Sobes.tech
Junior — Middle

Hoe verwerkt en verzendt gRPC de status van antwoorden?

sobes.tech AI

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