тестирование конечных точек движка приложения на локальном хосте (IOS и Python)

Мои конечные точки работают через API-Explorer, а также работают в среде выполнения движка приложения (через сеть)

Но когда я указываю своему клиенту IOS (через симулятор) на localhost: 8080, мои тесты IOS терпят неудачу, и я вижу, что в конечную точку прибывают пустые полезные данные сообщения (на стороне Python).

Это довольно неприятно, и я пытался понять это несколько дней ...

Я зашел в исходный код protorpc, добавил распечатку и получил следующее:

{
  "jsonrpc": "2.0",
  "method": "tstone.person.createGuy",
  "id": "gtl_1",
  "params": {
    "resource": {
      "isFemale": false,
      "alias": "Alias",
      "city": "Hanoi",
      "id": "1",
      "mobile": "+84932340799",
      "privs": "privs",
      "email": "hodanhcXXXgmail.com",
      "last": "Danh Chuan",
      "first": "Ho",
      "tags": "tags"
    }
  },
  "apiVersion": "v1"
}

Итак, ясно, что мои данные поступают от клиента IOS, но где-то в смеси они теряются, так что нет данных о свойствах сообщения "запрос", которое достигает моего кода ......_ 2_ Я также вижу это предупреждение в консоли сервера:

protojson.py:267] No variant found for unrecognized field: resource

Переполнение стека означает, что "вариантная" ошибка была обычным явлением (на локальном хосте) в версии сервера разработки более 1,5 года назад ... и я использую (последнюю) версию:

  • приложение-двигатель-Python 1.9.34
  • ядро 2016.03.22

Поскольку он работает в указанных выше средах (API-Explorer / среда выполнения приложения-движка), я предполагаю, что это не проблема с моим кодом, а проблема с моей установкой или локальной конфигурацией.

Итак, я начал просматривать модули в моем каталоге vendored / lib, чтобы увидеть, были ли какие-то старые версии или конфликты с чем-то в модулях dev_appserver ....

Я нашел несколько таких, которых, как я подозреваю, НЕ ДОЛЖНО быть ... Похоже, что движок приложения уже должен иметь многие из них на своем собственном пути:

  • апиклиент
  • googleapiclient
  • httplib2
  • oauth2
  • oauth2client (используется инструментарием идентификации, так что с этим, вероятно, все в порядке)
  • protopigeon (Депутат Ferris3, так что я думаю, это тоже нормально)
  • пясн1
  • pyasn1_modules
  • RSA
  • simpleauth (я также использую это для инструментария идентификации, так что все в порядке)
  • simplejson
  • шесть
  • wsgiproxy

Кроме того, на странице установки Ferris я обнаружил следующее:

Если вы начинаете с нуля и используете webapp2 или просто используете Cloud Endpoints: используйте проект Skeleton

Итак, если мы НЕ используем webapp2, нам разрешено делать простые pip install ferris, но если мы используем конечные точки или webapp2, мы должны пройти через какой-то сложный процесс через Node, Yeoman и генератор Ferris ...

Почему дополнительная сложность ..... может кто-нибудь объяснить мне это?

И спасибо за любые советы !! Дьюи


person Dewey    schedule 27.03.2016    source источник
comment
Я думаю, вы задаете 2 не связанных между собой вопроса. В любом случае, что касается проекта обозрения, есть возможность использовать генератор обозрения, чтобы помочь вам с простым предустановленным приложением, показывающим, как использовать обозрение. Поскольку это генератор йоменов, вам понадобится узел, йомен и т. Д. Но это необязательно. Ничего сложного. Просто чтобы справиться с некоторыми шаблонными вещами :)   -  person Jeffrey Godwyll    schedule 28.03.2016
comment
Феррис зависит от клиента google-api-python, которому, в свою очередь, нужны все эти зависимости. Верно, что они, похоже, являются частью сторонней папки lib движка приложения, поэтому я предполагаю, что их можно добавить в раздел библиотек app.yaml, но отследить версии оттуда сложно, и по предыдущему опыту я могу точно сказать, что вы можете '' t зависят от тех, что находятся в производстве. Они не привязаны и не меняются все время. Я всегда продавал google-api-python-client в соответствии с советами @ developers.google.com/api-client-library/python/start/   -  person Jeffrey Godwyll    schedule 28.03.2016
comment
вы правы ... это было два вопроса ... Я просто не знала, связаны ли эти проблемы, но, похоже, нет ... в любом случае спасибо за ваш ответ ...   -  person Dewey    schedule 28.03.2016
comment
Рад, что смог помочь. Немного подправлены комментарии к ответу.   -  person Jeffrey Godwyll    schedule 28.03.2016


Ответы (2)


  1. Что касается проекта Ferris 3, есть возможность использовать генератор Ferris 3, чтобы помочь вам с простым предустановленным приложением, показывающим упрощенную структуру того, как начать работу с проектом. Поскольку это генератор yeoman, вам понадобится nodejs, yeoman и т. д.

    Но все это необязательно. Ничего сложного. Они просто там как вариант, чтобы начать работу по большому счету, обрабатывая немного шаблонов :)

  2. Ferris зависит от google-api-python-client, который, в свою очередь, требует все эти зависимости.

    Правда, эти зависимости, похоже, являются частью движка приложения и папок google cloud sdk lib и сторонних библиотек соответственно, поэтому я думаю, что их можно добавить в раздел библиотек app.yaml. Но отследить версии оттуда сложно, и по предыдущему опыту я могу сказать с некоторой степенью уверенности, что вы не захотите зависеть от тех, что находятся в производстве. Они не закреплены и поэтому постоянно меняются. Список абсолютно поддерживаемых библиотек можно найти на странице https://cloud.google.com/appengine/docs/python/tools/libraries27.

    Я всегда продавал google-api-python-client в соответствии с советами @ https://developers.google.com/api-client-library/python/start/installation#appengine Итак, то, что у вас есть сейчас, правильно.

  3. И последнее, но не менее важное: как вы правильно заметили, ошибка, которую вы видите, кажется, существует уже довольно долгое время. Дэйв Фишер предлагает обходной путь для unrecognized field: 'resource' ошибки в своем ответе несколько лет назад, который оказался полезным.

person Jeffrey Godwyll    schedule 28.03.2016
comment
спасибо за поддержку .... исправление (изменение сгенерированного исходного кода api) работает для меня. Пока не ясно, нужно ли отменить этот мод перед запуском реальной среды выполнения движка приложения или это неопасное изменение. Есть ли у вас какое-либо мнение, почему Google так не реагирует на то, чтобы это исправить? Можно подумать, что после закрытия Parse они будут во всем сообществе IOS .... - person Dewey; 29.03.2016

Кстати, эта проблема исправлена ​​в последней версии клиентской библиотеки Google API Objective-C. Пора все перенести на GTLR. Ага! :)

https://github.com/google/google-api-objectivec-client-for-rest

Другие документы для GTLR: https://github.com/google/google-api-objectivec-client-for-rest/wiki http://cocoadocs.org/docsets/GoogleAPIClientForREST

Предупреждение: мы обнаружили ошибку, используя эту библиотеку, потому что нам пришлось заменить некоторые из созданных библиотекой строк #import. Я забыл подробности, но это было легко отредактировать. Я просто ненавижу изменять сгенерированный код.

Настоящая боль - это все остальные небольшие изменения, связанные с портированием. ;) Это лучшая система и хороший порт.

person Dave Fisher    schedule 15.07.2016