如何使用endpoints-proto-datastore通过entityKey检索对象?

时间:2014-11-02 02:22:19

标签: python google-cloud-datastore app-engine-ndb endpoints-proto-datastore

我有一个模特

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'并使用整数键进行查询。

2 个答案:

答案 0 :(得分:0)

您提到的entityKey是对象typeid urlsafe 组合。

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

rev_key = ndb.Key(urlsafe=urlString)

有关详细信息,请参阅this section in the NDB Datastore API docs

答案 1 :(得分:0)

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

确保您的一个处理程序如下所示:

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

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

祝你好运