Python 从Google云端点中的请求路径获取参数

Python 从Google云端点中的请求路径获取参数,python,google-app-engine,google-cloud-endpoints,Python,Google App Engine,Google Cloud Endpoints,我正在用应用程序引擎上的Python测试一个云端点API,但是我在获取一个简单的请求参数时遇到了一些困难 我更熟悉Java的云端点,所以我可能(可能)遗漏了一些明显的东西。在本例中,我所要做的就是返回ServiceInfo对象,并在url路径/services/中指定id 我有一个简单的响应消息类: class ServiceInfo(messages.Message): crs = messages.StringField(1) services = messages.Stri

我正在用应用程序引擎上的Python测试一个云端点API,但是我在获取一个简单的请求参数时遇到了一些困难

我更熟悉Java的云端点,所以我可能(可能)遗漏了一些明显的东西。在本例中,我所要做的就是返回ServiceInfo对象,并在url路径
/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资源管理器发出请求,并在
id
字段中输入ABC,我会看到这个请求:

GET/_-ah/api/myApi/v1/services/ABC

但是回应说

“分析ProtoRPC请求时出错(无法分析请求内容:Message CombinedContainer缺少必需的字段id)”

当我打印
request.id
时,我得到
None

我所要做的就是从路径中获取
id
——我是否遗漏了一些非常明显的东西


谢谢

在几天后重新访问该网站后,我重新启动了本地开发服务器(使用
gcloud preview app run…
),它现在似乎正在使用url路径中的
id
(没有代码更改)因此,可能是开发服务器环境缓存了我的一个文件的旧版本?

它是否可以使用以
services?id=ABC
而不是
services/ABC
结尾的路径?文档似乎说它们都可以工作,但我先试试——然后我会尝试将arg从
id
重命名为
foo
,以防遇到一些没有提到的“保留名称”。让我们知道。。。!有趣<代码>服务?id=ABC给出了404,但
服务/?id=ABC
给出了正确的行为。我可以说,
id
似乎也没有什么特别之处。所以现在我只需要找出为什么它在url路径中不起作用。我似乎没有做任何与示例不同的事情。您是否可以链接显示此行为的已部署应用程序?这实际上仅在本地运行,但在停止此项目几天后,我重新启动了本地开发服务器,它似乎可以正常工作,没有代码更改。我将把这个问题标为已回答。