Back to Demos

gRPC + HTTP Fallback

Config-driven transport switching from IdServiceImpl

Transport Config

Make API Call

Batch Latency Test

Call History

No calls yet. Click "Call" or "Compare Both" to start.

Production Code (Java)

// From auto-operation - IdServiceImpl.java
@Service
public class IdServiceImpl implements IdService {
    @Autowired
    private IdProperties idProps;

    private IdServiceGrpc.IdServiceBlockingStub grpcStub;

    @Override
    public Optional<Boolean> blockUser(UserMetadataRequest request) {
        String transport = idProps.getTransport(); // "grpc" or "http"

        if ("http".equalsIgnoreCase(transport)) {
            return callHttp(request);
        }
        return callGrpc(request);
    }

    private Optional<Boolean> callGrpc(UserMetadataRequest request) {
        try {
            UserMetadataResponse response = grpcStub.blockUser(request);
            return Optional.of(response.getSuccess());
        } catch (StatusRuntimeException e) {
            log.error("gRPC call failed, status: {}", e.getStatus());
            return Optional.empty();
        }
    }

    private Optional<Boolean> callHttp(UserMetadataRequest request) {
        HttpEntity<String> entity = new HttpEntity<>(
            gson.toJson(request), headers
        );
        ResponseEntity<String> response = restTemplate.postForEntity(
            idProps.getHttpUrl() + "/api/block-user",
            entity, String.class
        );
        // Parse response...
    }
}