我使用 endpoints-proto-datastore 库在应用引擎上编写了一个非常简单的应用程序。我的列表方法有问题。我需要从 javascript 客户端查询数据,并能够根据用户输入更新任何特定实体。端点按预期返回实体数组,但有时有两个实体共享相同的 id。这使得无法可靠地更新数据存储中的实体,因为我无法判断 id 实际属于哪个实体。
这里是数据存储查看器工具的屏幕截图:
以及通过 api explorer 调用 list 方法的结果:
200 OK
<headers omitted>
{
"items": [
{
"id": 5906470911296406000,
"prices": [
"$1000.00"
],
"options": [
"Chrome"
],
"title": "New Equipment",
"quantity": true
},
{
"id": 5906470911296406000,
"title": "New Equipment",
"quantity": false
}
]
}
您可以在 api explorer 中看到 id 重复,但在数据存储中没有。到目前为止,我一直无法可靠地产生这种行为,但似乎只有当我将两个与上面非常相似的实体添加到数据存储区时才会发生这种情况。
我的模型:
class AvailableEquipment(EndpointsModel):
_message_fields_schema = ('id', 'title', 'options', 'prices', 'quantity')
title = ndb.StringProperty()
options = ndb.StringProperty(repeated=True)
prices = ndb.StringProperty(repeated=True)
quantity = ndb.BooleanProperty()
我的 API:
@endpoints.api(name='equipment', version='v1', description='API for available equipment data')
class AvailableEquipmentAPI(remote.Service):
@AvailableEquipment.method(path='equipment', http_method='POST', name='insert')
def EquipmentInsert(self, equipment):
equipment.put()
return equipment
@AvailableEquipment.query_method(path='equipment', name='list')
def EquipmentList(self, query):
return query
所有这些测试都是在本地开发服务器上进行的。谢谢你提供的所有帮助。