Junior — Middle
gRPC cavab statuslarını necə işləyir və ötürür?
sobes.tech Süni İntellekt
AI-dan cavab
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 передает статусы через код и сообщение, позволяя клиенту точно понять результат вызова.