我有一个模特
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'并使用整数键进行查询。
答案 0 :(得分:0)
您提到的entityKey
是对象type
和id
的 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/