0

grpc を介してサーバー エラーを報告する方法を見つけようとしています。私が達成したいのは、実際に何が起こったのかをクライアントに伝えるのに十分な、冗長で静的に定義されたエラーです。

次のリクエストがあるとします。

message UpdateEmailRequest {
  string email = 1;
}

message UpdateEmailResponse {
}

次に、ステータス コードはクライアントにエラーの詳細を通知しないため、エラーをより詳細にしようとしていました。を使用できますFieldViolationが、静的な方法でのエラーではなく、フィールドのみを指定します。Descriptionこれらを提供することもできますFieldViolationsが、クライアントは文字列エラーを処理して何らかの方法で内部クライアント エラーにマップするか、クライアントがこれらのエラーを直接表示する必要があります。これは、ビジネス ロジックがエラー タイプに基づいて異なる可能性があるため、場合によっては機能しません。

私が発明したのは:

message UpdateEmailResponse {
  enum ErrorCode {
    UNKNOWN_ERROR = 0;
    INVALID_EMAIL_LENGTH = 1;
    INVALID_EMAIL_FORMAT = 2;
    INVALID_EMAIL_TEMPORARY_MAIL_NOT_ALLOWED = 3; //temporary mail services
    INVALID_EMAIL_ALIAS = 4; // email is alias or redirect, not the actual email
    INVALID_EMAIL_FORBIDDEN_WORDS = 5; // for email with bad language
    ...
  }

  message Body {}

  oneof response {
    ErrorCode error_code = 1;
    Body body = 2;
  }
}

このようにして、ステータス コードと組み合わせて特定のエラーをクライアントに知らせることができますが、すぐに使用できるものは使用されず、FieldViolationsエラーを処理する方法は grpc 以外のように見えます。

他の解決策は、json にエラー コード (リクエスト エンティティ内で定義することもできます) とエラー メッセージをFieldViolations's内に埋め込むことですDescriptionが、これも grpc 以外の方法のように見えます。

grpc でエラーが発生して困っています。適切な方法を教えてください。

ありがとう。

4

0 に答える 0