2014-10-25 3 views
1

EDIT Я разместил вопрос об этом, и он должен быть исправлен в версии 1.9.16 SDK Google AppEngine. https://code.google.com/p/googleappengine/issues/detail?id=11414Как вызвать API-интерфейсы конечных точек Google для локального хоста?


Я занимаюсь разработкой службы с помощью Google Cloud Endpoints.

И REST, и API RPC отлично работают, когда я развертываю его в App Engine. Однако странно, когда я тестирую локальную службу (localhost), звонки REST работают нормально, но у меня возникают проблемы с вызовами с использованием RPC.

Мой метод подписи в бэкэнд:

@ApiMethod(name = "user.updateprofile", httpMethod = HttpMethod.POST) 
public UserProfileDto updateProfile(@Named("sessionToken") String sessionToken, UserProfileDto profile) throws UnauthorizedException { return profile; } 

Для простоты я просто возвращение UserProfileDto непосредственно.

Я попытался выполнить следующий запрос локально:

POST http://localhost:4567/_ah/api/rpc?prettyPrint=false 
Content-Type: application/json-rpc 
Accept: application/json-rpc 
{ 
"method": "mobilebackend.user.updateprofile", 
"id": "gtl_1", 
"jsonrpc": "2.0", 
"params": { 
    "sessionToken": "12345", 
    "resource": { 
     "username": "foo", 
     "userPrivate": true 
    } 
}, 
"apiVersion": "v1" 
} 

Когда я поставил точку останова в методе updateProfile, я вижу, что sessionToken правильно 12345 однако username поле null и userPrivate поле false, хотя я указал его как true. Примером UserProfileDto (profile) является не null.

Ошибка, что он не может вводить значения в поля DTO при использовании вызовов RPC localhost. Когда я тестирую его на развернутой версии, он отлично работает, и когда я использую вызовы REST, он работает как на локальном хосте, так и при развертывании в App Engine.

Когда я изменяю url в вышеуказанном запросе, чтобы нацелить развернутую версию моего приложения на движок приложения, он работает отлично. https://<app-name>.appspot.com/_ah/api/rpc?prettyPrint=false

Я запустить службу на локальном хосте с помощью:

mvn appengine:devserver 

ли я пропустить некоторые настройки, чтобы вызвать методы Cloud Endpoints RPC LOCALHOST? Или это не поддерживается?

Я также заметил, что я также попытался с помощью автоматической генерируемой клиентской библиотеки iOS, которая использует RPC, и она также терпит неудачу с той же ошибкой, что и служба, не вставляющая значения в поля объекта DTO.

+0

У меня была та же проблема, localhost продолжит давать мне NULL результаты для пройденных параметров. Нашел что-то в моих заметках для решения некоторых проблем с локальным хостом, запустив локальный devserver из appengine sdk с параметром appengine-java-sdk-1.8.6/bin/dev_appserver.sh --address = "0.0.0.0" это Некоторое время назад я решил некоторые из моих проблем с localhost. Не помните, был ли этот NULL-переход одним из них, возможно, стоит попробовать? – Pega88

+0

@ Pega88 Спасибо, я постараюсь запустить сервер разработки с 0.0.0.0 и посмотреть, устраняет ли это проблему. Вы видели: https://code.google.com/p/googleappengine/issues/detail?id=11414 Google заявляет, что он должен быть исправлен в версии 1.9.16.Это следующий релиз, так как 1.9.15 был выпущен пару дней назад. Они выпускаются почти каждый месяц, поэтому я с нетерпением жду следующего релиза в качестве рождественского подарка. ;) – dynamokaj

+0

Вы решили свою проблему? –

ответ

1

Я тестировал выпуск 1.9.17 SDK Google AppEngine и могу подтвердить, что использование объектов в RPC-ответах POST теперь отлично работает.

Смежные вопросы