udemy gRPC: Error Handling
RESTful API の場合、2xx, 3xx, 4xx, 5xx のように
ステータスコードでエラーを知らせる。
ただし、明確に仕様化されているものの、エラー内容自体は明瞭ではない
gRPC の場合
gRPC の場合も、エラーコード(status code)で知らせる
GRPC_STATUS_**** で始まるメッセージ。
CLIENT_CANCELLED
SERVER_CANCELLED
...
更に、metadata context を使うことで補完する。
Rust: Tonic の場合
基本的に、tonic で gRPC をする場合、Client も Server も送り合うデータは
Result type にラップされている。
送るデータ or RPC の戻り値(server): Result<Message, Status>
受信データ: Result<Some(Message), Status>
Message の部分は MessageStream になりうる。
なので、意識しなくても Error Handling をすることになる。
対して Hands on しなくていいかも
gRPC Deadlines
gRPC Client の側が設定する値
deadline = 締め切り時間
gRPC の呼び出しが完了するまでの時間を示していて、
これを超えると GRPC_STATUS_DEADLINE_EXCEEDED error になる。
デフォルトは 十分長い時間になっているっぽいが、
Document では client 側の call で、deadline を必ず設定することを推奨している。
(実装者次第)
サーバー側は、 クライアント側で設定された deadline を確認できる。
それを超えたらキャンセルする実装になっていることが好ましい.
gRPC がチェインする (クライアント -> サーバーA -> サーバーB) の場合、
Deadlien は伝搬するようにする。