1*cc02d7e2SAndroid Build Coastguard Worker# Generic API Example 2*cc02d7e2SAndroid Build Coastguard Worker 3*cc02d7e2SAndroid Build Coastguard Worker## Overview 4*cc02d7e2SAndroid Build Coastguard Worker 5*cc02d7e2SAndroid Build Coastguard WorkerWhile generated stub code is often the simpler and best choice for sending and handling API calls, 6*cc02d7e2SAndroid Build Coastguard Workergeneric APIs offer unique advantages in specific scenarios, such as proxy implementation. 7*cc02d7e2SAndroid Build Coastguard WorkerTheir ability to manage multiple message types with a single function makes them particularly handy 8*cc02d7e2SAndroid Build Coastguard Workerin these cases. This example demonstrates how to use generic APIs to achieve this flexibility. 9*cc02d7e2SAndroid Build Coastguard Worker 10*cc02d7e2SAndroid Build Coastguard WorkerThis example implements `greeter_callback_client` and `greeter_callback_server` using the generic APIs. 11*cc02d7e2SAndroid Build Coastguard WorkerTherefore, looking at the difference would be helpful to understand how to use generic APIs. 12*cc02d7e2SAndroid Build Coastguard Worker 13*cc02d7e2SAndroid Build Coastguard Worker### Try it! 14*cc02d7e2SAndroid Build Coastguard Worker 15*cc02d7e2SAndroid Build Coastguard WorkerOnce you have working gRPC, you can build this example using either bazel or cmake. 16*cc02d7e2SAndroid Build Coastguard Worker 17*cc02d7e2SAndroid Build Coastguard WorkerRun the server, which will listen on port 50051: 18*cc02d7e2SAndroid Build Coastguard Worker 19*cc02d7e2SAndroid Build Coastguard Worker```sh 20*cc02d7e2SAndroid Build Coastguard Worker$ ./greeter_server 21*cc02d7e2SAndroid Build Coastguard Worker``` 22*cc02d7e2SAndroid Build Coastguard Worker 23*cc02d7e2SAndroid Build Coastguard WorkerRun the client (in a different terminal): 24*cc02d7e2SAndroid Build Coastguard Worker 25*cc02d7e2SAndroid Build Coastguard Worker```sh 26*cc02d7e2SAndroid Build Coastguard Worker$ ./greeter_client 27*cc02d7e2SAndroid Build Coastguard Worker``` 28*cc02d7e2SAndroid Build Coastguard Worker 29*cc02d7e2SAndroid Build Coastguard WorkerIf things go smoothly, you will see the client output: 30*cc02d7e2SAndroid Build Coastguard Worker 31*cc02d7e2SAndroid Build Coastguard Worker``` 32*cc02d7e2SAndroid Build Coastguard Worker### Send: SayHello(name=World) 33*cc02d7e2SAndroid Build Coastguard WorkerOk. ReplyMessage=Hello World 34*cc02d7e2SAndroid Build Coastguard Worker### Send: SayHello(name=gRPC) 35*cc02d7e2SAndroid Build Coastguard WorkerOk. ReplyMessage=Hello gRPC 36*cc02d7e2SAndroid Build Coastguard Worker``` 37