Errors
The above examples show how to handle a successful RPC when the client successfully receives a response from the server. But what happens if our request is invalid? Or if there is a bug in the server that results in an error?
Earlier in the chapter, when we were creating the Go server, we introduced the gRPC
error codes: sixteen error codes that servers can use when categorizing an error. The
Go server has a simple example: if the client requests an unknown film ID, it sends
back a Not Found
error code.
In RPC clients, such an error will manifest as an exception:
Ruby
# Our server is hard-coded to know about IDs 4-6. It does
# not know about ID 7.
request
=
GetFilmRequest
.
new
(
id
:
'7'
)
begin
response
=
stub
.
get_film
(
request
)
puts
response
.
inspect
rescue
GRPC
:
:BadStatus
=>
e
# RPC exceptions have a numeric 'code' field (the gRPC error code)
# and a string 'details' (the message supplied by the server)
puts
"failed:
#{
e
.
details
}
(code...