从Google Cloud Endpoints中的请求路径获取参数

时间:2015-02-02 15:14:35

标签: python google-app-engine google-cloud-endpoints

我正在App Engine上用Python测试Cloud Endpoint API,但是我在获取简单的请求参数时遇到了一些困难。

我对Java端点for Java更熟悉,所以我可能(可能)遗漏了一些明显的东西。我在这个例子中尝试做的就是返回ServiceInfo对象,并在url路径中指定id /services/<id>

我有一个简单的响应消息类:

class ServiceInfo(messages.Message):
    crs = messages.StringField(1)
    services = messages.StringField(2)

和API类:

@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资源管理器发出请求并输入ABC作为id字段,我会看到此请求:

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 - 我是否遗漏了一些非常明显的东西?

谢谢!

1 个答案:

答案 0 :(得分:1)

几天后重新访问它后,我重新启动了本地开发服务器(使用gcloud preview app run ...),它现在似乎正在使用url路径中的id(没有代码)那么也许开发服务器环境一直在缓存我的一个文件的旧版本?