google appengine крайна точка proto хранилище за данни просто получаване на идентификатор пример за връщане не е намерено

Опитвам се с просто получаване на прото хранилище за данни в крайна точка за няколко дни.

http://endpoints-proto-datastore.appspot.com/examples/simple_get.html

Работи, но винаги не се връща.

Ето get by id 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

Изпускам ли нещо? Благодаря за съвета.




Отговори (1)


Направих вашия пример тук и той работи добре с някои промени:

@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 методите.

Просто извършете вмъкване на елемент, вземете идентификатора на току-що вмъкнатия елемент и след това изпълнете ItemGet с предоставения идентификатор.

За get предпочитам този начин (без да използвам /{id}, но изисквам от потребителя да направи GET заявка - т.е. ah/api/path?id=__ , което изглежда по-правилно за аз). Ако имате някакви въпроси, попитайте по-долу.

person Ciro Costa    schedule 09.02.2014