Каково правильное соглашение для преобразования нижестоящего кода ошибки в код ошибки gRP C? - PullRequest
1 голос
/ 30 марта 2020

Допустим, я работаю в ServiceA, которая вызывает ServiceB. Теперь, если ServiceB возвращает коды ошибок NotFound, AlreadyExists или InvalidArgument, что мы должны вернуть вызывающей стороне ServiceA?

  1. На основе документации в gRP C код ошибки, похоже, что Internal - это то, что мы должны вернуть, если

    инварианты, ожидаемые базовой системой, были нарушены

    Я не очень уверен, что означает этот жирный текст, означает ли это, что любая последующая ошибка должна быть возвращена как Internal код ошибки?

  2. Например, документация NotFound гласит:

    NotFound означает, что какой-то запрошенный объект (например, файл или каталог) не был найден

    Означает ли это, что мы должны проанализировать нисходящую ошибку и вернуть NotFound вызывающей стороне ServiceA, если ServiceB вернет NotFound?

1 Ответ

1 голос
/ 06 апреля 2020

Код состояния, который вы возвращаете для конечной точки в ServiceA, должен иметь смысл для вызывающей стороны. Ваша бизнес-логика c должна указывать, какой код статуса должен быть возвращен для последующей ошибки. Может иметь смысл возвращать код нисходящего сервиса, но не всегда.

Рассмотрим случай, когда вы реализуете конечную точку getUserDetails, которая вызывает getUser из UserService и getRatings из RatingService.

  1. Если getUser возвращает NotFound , имеет смысл также вернуть NotFound вызывающей стороне, поскольку пользователь не существует.
  2. Если getRatings возвращает NotFound , вы можете вернуть Внутреннюю ошибку, поскольку у вас недостаточно информации для возврата полного ответа. В этом случае, если вы вернете NotFound , клиент может предположить, что пользователь не был найден, что не так.
...