如何将REST请求发送到带注释的GRPC端点?

时间:2019-05-11 04:21:23

标签: rest grpc http2

从GRPC protobuf curl进行REST注释的端点时,我没有收到有效的响应

我当前正在运行bookstore server中的here

我能够使用提供的客户端通过GRPC成功命中端点。

$ python bookstore_client.py
ListShelves: shelves {
  id: 1
  theme: "Fiction"
}
shelves {
  id: 2
  theme: "Fantasy"
}

当我尝试点击相应的REST端点时,它会返回一个非文本(即非JSON)响应

$ curl --raw --http2 localhost:8000/v1/shelves 2>/dev/null | xxd
00000000: 0000 1804 0000 0000 0000 0400 4000 0000  ............@...
00000010: 0500 4000 0000 0600 0020 00fe 0300 0000  ..@...... ......
00000020: 0100 0004 0800 0000 0000 003f 0001 0000  ...........?....
00000030: 0806 0000 0000 0000 0000 0000 0000 00    ...............

无论uri是什么,我都会收到此回复,即/v1/foobar的结果相同

以下是protobuf

中的相关行
  rpc ListShelves(google.protobuf.Empty) returns (ListShelvesResponse) {
    // Define HTTP mapping.
    // Client example (Assuming your service is hosted at the given 'DOMAIN_NAME'):
    //   curl http://DOMAIN_NAME/v1/shelves
    option (google.api.http) = { get: "/v1/shelves" };
  }

我期望python客户端能够给我相同的响应,但是我从GRPC服务器收到了非文本响应。

1 个答案:

答案 0 :(得分:0)

在该示例中,端口8000是gRPC,而不是REST端点。

要运行带注释的终结点,您需要从docs运行可扩展服务代理:

“ Cloud Endpoints支持协议转码,以便客户端可以使用HTTP / JSON访问您的gRPC API。可扩展服务代理(ESP)将HTTP / JSON转码为gRPC。”

REST端点将通过ESP textarea { border: none; outline: none; width: 100%; height: 50vh; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; resize: none; /*remove the resize handle on the bottom right*/ } 选项在其他端口上服务。