Need to address 4 use cases:
- Client wants to send additional request headers to server
- Client wants to read all of the response headers or trailers
- Server wants to read all of the request headers
- Server wants to send additional response headers or trailers to client
In gRPC, methods differ by cardinality: request may be either unary in both ways (UNARY_UNARY), client-side streaming (STREAM_UNARY), server-side streaming (UNARY_STREAM) and bidirectional streaming (STREAM_STREAM). Keeping that in mind, some cases listed above are far more difficult to design than the others.