Sobes.tech
Junior — Middle

Wie verarbeitet und überträgt gRPC Antwortstatus?

sobes.tech KI

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