2

我有一个模型

class MyModel(EndpointsModel):
    _message_fields_schema = ('entityKey', 'prop')
    prop = ndb.StringProperty()

和一个 API 方法:

@MyModel.method(request_fields=('entityKey',),
                  path='mymodel/{entityKey}', http_method='GET', name='mymodel.get')
def mymodel_get(self, mymodel):
    if not mymodel.from_datastore:
      raise endpoints.NotFoundException('mymodel not found.')
    return mymodel

但是当我尝试像这样的查询时

http://localhost:8080/_ah/api/myapi/v1/mymodel/adsfasf-cm9jay1zdG9wchELEgRBcmVhGICAgICAgIAJDA

我得到一个 404。我知道该对象存在,并且我知道那是正确的 urlsafe 键。这是怎么回事?当使用 'id' 而不是 'entityKey' 并使用整数键查询时,相同的代码也有效。

4

2 回答 2

0

entityKey你提到的是对象的urlsafe组合typeid.

要从该字符串创建密钥,请使用以下代码:

rev_key = ndb.Key(urlsafe=urlString)

有关更多信息,请参阅NDB 数据存储 API 文档中的此部分

于 2014-12-11T12:48:29.457 回答
0

您编写的代码是正确的,您的模型和方法都很好。这使我相信您的问题实际上出在 app.yaml 文件中。

确保您的处理程序之一看起来像这样:

handlers:
- url: /_ah/spi/.*
  script: MyApi.APPLICATION

请注意,虽然处理程序指向/_ah/spi/.*的实际路径是/_ah/api/

祝你好运

于 2015-09-29T19:04:49.120 回答