从 Google Cloud Endpoints 中的请求路径获取参数
Getting parameter from request path in Google Cloud Endpoints
我正在 App Engine 的 Python 中试验云端点 API,但我在获取简单的请求参数时遇到了一些困难。
我更熟悉 Java 的 Cloud Endpoints,所以我可能(可能)遗漏了一些明显的东西。在这个例子中,我想要做的就是 return ServiceInfo 对象,在 url 路径中指定 id
,/services/<id>
我有一条微不足道的回复消息class:
class ServiceInfo(messages.Message):
crs = messages.StringField(1)
services = messages.StringField(2)
和API class:
@endpoints.api(name='myApi', version='v1', description='My API', audiences=[endpoints.API_EXPLORER_CLIENT_ID])
class MyApi(remote.Service):
#No request body, but need to capture the id from the URL
ID_RESOURCE = endpoints.ResourceContainer(
message_types.VoidMessage,
id=messages.StringField(1, variant=messages.Variant.STRING, required=True))
@endpoints.method(ID_RESOURCE, ServiceInfo, path='services/{id}', http_method='GET', name='station.getServices')
def get_services(self, request):
print request.id
...
return ServiceInfo(crs=request.id, services=...)
现在,如果我通过 API 资源管理器发出请求并在 id
字段中输入 ABC,我会看到此请求:
GET /_ah/api/myApi/v1/services/ABC
但是回复说
"Error parsing ProtoRPC request (Unable to parse request content: Message CombinedContainer is missing required field id)"
当我打印 request.id
时,我得到 None
。
我想要做的就是从路径中获取 id
- 我是否遗漏了一些非常明显的东西?
谢谢!
几天后重新访问后,我重新启动了本地开发服务器(使用 gcloud preview app run ...
),它现在似乎可以使用 [=14= 中的 id
] 路径(没有代码更改)所以也许开发服务器环境一直在缓存我的文件之一的旧版本?
我正在 App Engine 的 Python 中试验云端点 API,但我在获取简单的请求参数时遇到了一些困难。
我更熟悉 Java 的 Cloud Endpoints,所以我可能(可能)遗漏了一些明显的东西。在这个例子中,我想要做的就是 return ServiceInfo 对象,在 url 路径中指定 id
,/services/<id>
我有一条微不足道的回复消息class:
class ServiceInfo(messages.Message):
crs = messages.StringField(1)
services = messages.StringField(2)
和API class:
@endpoints.api(name='myApi', version='v1', description='My API', audiences=[endpoints.API_EXPLORER_CLIENT_ID])
class MyApi(remote.Service):
#No request body, but need to capture the id from the URL
ID_RESOURCE = endpoints.ResourceContainer(
message_types.VoidMessage,
id=messages.StringField(1, variant=messages.Variant.STRING, required=True))
@endpoints.method(ID_RESOURCE, ServiceInfo, path='services/{id}', http_method='GET', name='station.getServices')
def get_services(self, request):
print request.id
...
return ServiceInfo(crs=request.id, services=...)
现在,如果我通过 API 资源管理器发出请求并在 id
字段中输入 ABC,我会看到此请求:
GET /_ah/api/myApi/v1/services/ABC
但是回复说
"Error parsing ProtoRPC request (Unable to parse request content: Message CombinedContainer is missing required field id)"
当我打印 request.id
时,我得到 None
。
我想要做的就是从路径中获取 id
- 我是否遗漏了一些非常明显的东西?
谢谢!
几天后重新访问后,我重新启动了本地开发服务器(使用 gcloud preview app run ...
),它现在似乎可以使用 [=14= 中的 id
] 路径(没有代码更改)所以也许开发服务器环境一直在缓存我的文件之一的旧版本?