我正在尝试简单的get端点proto数据存储区几天。
http://endpoints-proto-datastore.appspot.com/examples/simple_get.html
它有效,但总是找不到。
这是id by api。
https://pttbuying.appspot.com/_ah/api/pttbuying/v1/items/4504690549063680
这是我的型号代码。
class Item(EndpointsModel):
_message_fields_schema = ('id', 'item_title', 'item_link', 'item_price', 'item_description_strip', 'datetime')
item_title = ndb.StringProperty(indexed=False)
item_author_name = ndb.StringProperty(indexed=False)
item_link = ndb.StringProperty(indexed=True)
item_description_strip = ndb.StringProperty(indexed=False)
item_price = ndb.StringProperty(indexed=False)
datetime = ndb.DateTimeProperty(auto_now_add=True)
这是我的api代码
@endpoints.api(name='pttbuying', version='v1',
allowed_client_ids=[WEB_CLIENT_ID, ANDROID_CLIENT_ID,
IOS_CLIENT_ID, endpoints.API_EXPLORER_CLIENT_ID],
audiences=[ANDROID_AUDIENCE],
scopes=[endpoints.EMAIL_SCOPE])
class PttBuyingApi(remote.Service):
"""PttBuying API v1."""
@Item.method(request_fields=('id',),
path='items/{id}', http_method='GET', name='item.MyModelGet')
def MyModelGet(self, my_item):
if not my_item.from_datastore:
raise endpoints.NotFoundException('Item not found.')
return my_item
@Item.query_method(query_fields=('limit', 'order', 'pageToken'), path='items', name='item.list')
def MyModelList(self, query):
return query
我错过了什么吗? 谢谢你的建议。
答案 0 :(得分:0)
我在这里做了你的例子,它适用于一些变化:
@Item.query_method(query_fields=('limit', 'pageToken',),
path='items',
http_method='GET',
name='items.list')
def ItemsList(self, query):
return query
@Item.method(request_fields=('id',),
path='item',
http_method='GET',
name='item.get')
def ItemGet(self, item):
if not item.from_datastore:
raise endpoints.NotFoundException('item not found')
return item
@Item.method(path='item',
http_method='POST',
name='item.post')
def ItemPost(self, item):
item.put()
return item
我没有改变关于模型的事情,只是api方法。
只需执行项目插入,获取刚刚插入的项目的ID,然后使用提供的ID执行ItemGet。
对于get我更喜欢这种方式(不使用/ {id},但要求用户进行GET查询 - 即啊/ api / path?id = __,这似乎对我更正确)。如果您有任何疑问,请询问。