• Real-time data access • Different platforms and languages • Need to feature-scale with versioning • Maintain backward compatibility Mobile Android Mobile iOS Backend Processes Desktop Report tool Website Backend Android Java/Kotlin Objective-C Java, Python, Scala C#, Java NodeJS
SOAP via Frameworks No By language XML No Somewhat RPC over HTTP/JSON No Yes Custom None No No Custom REST No Yes Custom * No No REST via Frameworks Yes Swagger, others Likely JSON No Somewhat gRPC Yes No Included Binary Yes Yes
native pipelining New connection per request vs persistent TCP connection Repetitive vs compressed Polling vs streaming Non-secure by default vs TLS by default Everything supports it vs limited support
Server can stream large response to client • Strategy to keep client or server from running out of memory • Easy to declare in the IDL • Framework provides API support to use stream
tap handlers • Intercept requests to implement retry/backoff logic • Add tracing using interceptors • Add HTTP stream taps to implement rate limits • Support for pluggable authorization • Add monitoring and metrics using interceptors (e.g. Prometheus)