Google Cloud Endpoints (ESP) gRPC 转码为驼峰式大小写
Google Cloud Endpoints (ESP) gRPC transcoding to camel case
我已经使用 Google Cloud Endpoints / ESP 部署了 gRPC 服务器,按照此处的说明进行操作:
https://cloud.google.com/endpoints/docs/grpc/get-started-kubernetes-engine
在我的原型文件中,我的字段在 snake_case 中命名,遵循 Protocol Buffers 命名约定 (https://developers.google.com/protocol-buffers/docs/style#message-and-field-names),如下所示:
message MyMessage {
string my_field = 1;
}
部署到 Cloud Endpoints 时,字段名称会转换为驼峰式。因此,如果我使用 HTTP 端点调用 API,JSON 响应如下所示:
{
"myField":"field value"
}
如果我使用 GRPC 客户端 (Node.js) 调用服务,则响应对象以原始格式返回:
{
"my_field":"field value"
}
Cloud Endpoints Developer Portal 文档中的字段名称也转换为驼峰式大小写。
我更愿意为 GRPC 和 HTTP 客户端使用 snake case,因为我要替换现有的 API。如果我可以防止字段名称被转换,我基本上可以将后端切换到新服务而无需对客户端进行任何更改。
有没有办法强制 ESP 在转码为 HTTP/JSON 时使用驼峰式字段名称?
不幸的是,没有简单的方法。我刚刚为此功能请求提交了增强 issue。
我们将尝试分配资源以获取它。
我正在使用 ESP 将我的 grpc 应用程序部署到 k8s,下面的配置会将 protobuf 响应转码为蛇形而不是驼峰形
- name: esp
image: gcr.io/endpoints-release/endpoints-runtime:1
imagePullPolicy: Always
args: [
"--http_port=9000",
"--backend=grpc://127.0.0.1:8080",
"--service=xxxxxx",
"--version=xxxxxx",
"--transcoding_preserve_proto_field_names",
"--transcoding_always_print_primitive_fields"
]
ports:
- name: http
containerPort: 9000
我已经使用 Google Cloud Endpoints / ESP 部署了 gRPC 服务器,按照此处的说明进行操作:
https://cloud.google.com/endpoints/docs/grpc/get-started-kubernetes-engine
在我的原型文件中,我的字段在 snake_case 中命名,遵循 Protocol Buffers 命名约定 (https://developers.google.com/protocol-buffers/docs/style#message-and-field-names),如下所示:
message MyMessage {
string my_field = 1;
}
部署到 Cloud Endpoints 时,字段名称会转换为驼峰式。因此,如果我使用 HTTP 端点调用 API,JSON 响应如下所示:
{
"myField":"field value"
}
如果我使用 GRPC 客户端 (Node.js) 调用服务,则响应对象以原始格式返回:
{
"my_field":"field value"
}
Cloud Endpoints Developer Portal 文档中的字段名称也转换为驼峰式大小写。
我更愿意为 GRPC 和 HTTP 客户端使用 snake case,因为我要替换现有的 API。如果我可以防止字段名称被转换,我基本上可以将后端切换到新服务而无需对客户端进行任何更改。
有没有办法强制 ESP 在转码为 HTTP/JSON 时使用驼峰式字段名称?
不幸的是,没有简单的方法。我刚刚为此功能请求提交了增强 issue。
我们将尝试分配资源以获取它。
我正在使用 ESP 将我的 grpc 应用程序部署到 k8s,下面的配置会将 protobuf 响应转码为蛇形而不是驼峰形
- name: esp
image: gcr.io/endpoints-release/endpoints-runtime:1
imagePullPolicy: Always
args: [
"--http_port=9000",
"--backend=grpc://127.0.0.1:8080",
"--service=xxxxxx",
"--version=xxxxxx",
"--transcoding_preserve_proto_field_names",
"--transcoding_always_print_primitive_fields"
]
ports:
- name: http
containerPort: 9000