2014-10-07 3 views
0

У меня есть конкретный вопрос об извлечении запроса из метода модели конечных точек в Python.Конечные точки Google

# DataPointModel GET LIST api method 
    @DataPointModel.query_method(query_fields=('user_key',), # Fields from which the method is querying from 
           path='datapoint/list/{user_key}', # REST api parameters 
           name='datapoint.list_get_by_user_key') # Metod name 
    def datapoint_list_get_by_user_key(self, query): 
     ''' 
     Returns the DataPointModel object model list by its user KEY 
     ''' 
     return query 

И у меня есть клиентская сторона на Android (Java). Проблема заключается в том, что это возвращает DataPointModelCollection, который не содержит список (dataPointsCollection.getDatapointList(), это null).

DataPointModelCollection содержит «элементы», поэтому он содержит нужные объекты, , если напечатан toString(), и отображается как JSON. Однако проблема все еще остается, потому что Я хотел бы отобразить полученный DataPointModelCollection как список объектов Java DataPointModel.

Мне очень хотелось бы услышать некоторые сведения об этом. Что меня беспокоит, так это то, что я могу загрузить DataPointModelCollection, где я установил список для него ... но он просто не работает наоборот?

ответ

0

Я уже понял - DataPointModelCollection должен иметь другое имя, поскольку конечные точки каким-то образом имеют зарезервированное имя по умолчанию для каждой коллекции моделей. Так что я просто изменил имя модели, и она сработала, до DataPointModelInsertCollection

1

EDIT 2: Извините, я все еще не понимаю, о чем вы спрашиваете. Это фактический ответ - читайте только другие разделы для интереса.

This docs page объясняет, как вы можете извлекать объекты, которые находятся в созданном вами на базе Android классе «-Collection». Вам нужно позвонить .getItems(), а не названную функцию типа getDatapointList(). В разделе «О Поддерживаемые типы возвращаемых значений»:

Списки сериализуемых типов Собственно, что Endpoints создает новый «Коллекция» JSON класс, который похож на любой другой клиент класса модели. Например, если у вас есть объект в вашей модели, то есть , представленный Lobster.java, и вы хотите вернуть List, , библиотека будет иметь LobsterCollection.java. Вы можете получить список Lobsters в своем клиенте, вызвав getItems().


EDIT: очень жаль, я признаю, что обезжиренное свой вопрос, и мой мозг разобранную Java. Python Ответ первый:

ПИТОН

Вы должны быть знакомы с Message объектов и их Fields. Вы не можете просто вернуть объект python. Объекты сообщения содержат несколько значений поля, которые используются для перевода объекта в объект JSON для передачи по HTTP-запросу API.

Чтобы вернуть объект сообщения из функции Endpoints, которая имеет список из нескольких объектов Message (каждый из которых включает, например, StringField и DateTimeField), класс Message, определяющий этот тип возврата, должен содержать MessageField , который позволяет размещать сообщения (такие как тип, который мы создали, который содержит StringField и DateTimeField) внутри других сообщений (наш тип возврата).Кроме того, на этом поле, вам нужно будет установить repeated=True, как вы можете видеть в следующем фрагменте:

# REPEATED IN MESSAGE FIELD IN ORDER CLASS 
class Lot(messages.Message): 
    price = messages.IntegerField(1, required=True) 
    quantity = messages.IntegerField(2, required=True) 

class Order(messages.Message): 
    symbol = messages.StringField(1, required=True) 
    total_quantity = messages.IntegerField(2, required=True) 
    trade_type = messages.EnumField(TradeType, 3, required=True) 
    lots = messages.MessageField(Lot, 4, repeated=True) # REPEATED FIELD! 
    limit = messages.IntegerField(5) 

JAVA

Вам необходимо реализовать класс-оболочку, которая содержит коллекция. See this question.

Прочтите here для получения дополнительной информации о параметрах и типах возвращаемых данных.

См. here за интересный ответ, в котором объясняется, как добавлять несколько типов объектов в качестве параметров (рассказ: не может выполнять несколько параметров типа сущности, не может выполнять Коллекции типа сущности, необходимо использовать объект-оболочку который содержит два объекта)

+0

Я попытался избежать работы с классом сообщений, потому что endpoints_proto_datastore lib позволяет запрашивать модельные запросы модели http://endpoints-proto-datastore.appspot.com/ – box