xref: /aosp_15_r20/external/grpc-grpc/examples/cpp/generic_api/README.md (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
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