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 でエラーが発生して困っています。適切な方法を教えてください。
ありがとう。