【问题标题】:How to call Google Cloud Endpoints RPC API on localhost?如何在 localhost 上调用 Google Cloud Endpoints RPC API?
【发布时间】:2014-10-25 15:30:46
【问题描述】:

编辑我在此发布了一个问题,它应该在 Google AppEngine SDK 的 1.9.16 版中得到修复。 https://code.google.com/p/googleappengine/issues/detail?id=11414


我正在使用 Google Cloud Endpoints 开发服务。

当我将 REST 和 RPC API 部署在 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,即使我将其指定为trueUserProfileDto (profile) 的实例不是null

问题是在使用 RPC 调用 localhost 时无法将值注入到 DTO 的字段中。当我在已部署的版本上对其进行测试时,它工作正常,当我使用 REST 调用时,它在 localhost 和部署在 App Engine 上时都可以工作。

当我更改上述请求中的 url 以在应用引擎上定位我的应用程序的部署版本时,它工作得很好。 https://<app-name>.appspot.com/_ah/api/rpc?prettyPrint=false

我使用以下命令在 localhost 上启动服务:

mvn appengine:devserver

为了调用 Cloud Endpoints RPC 方法 localhost,我是否遗漏了一些配置?还是不支持?

我应该注意到,我也尝试过使用 RPC 的自动生成的 iOS 客户端库,它也失败并出现相同的错误,因为服务无法将值注入 DTO 对象的字段。

【问题讨论】:

  • 我有同样的问题,本地主机会继续给我传递参数的 NULL 结果。在我的笔记中找到了一些解决一些本地主机问题的东西,从 appengine sdk 运行本地开发服务器,参数 appengine-java-sdk-1.8.6/bin/dev_appserver.sh --address="0.0.0.0" 这解决了我的一些问题localhost 不久前的问题。不记得这个 NULL 传递是否是其中之一,这也许值得尝试?
  • @Pega88 谢谢,我会尝试用 0.0.0.0 启动开发服务器,看看是否能解决问题。你看到了吗:code.google.com/p/googleappengine/issues/detail?id=11414Google 声明它应该在 1.9.16 版中修复。这是下一个版本,因为几天前发布了 1.9.15。他们几乎每个月都会发布,所以我期待着下一个版本作为圣诞礼物。 ;)
  • 你的问题解决了吗?
  • @MarCialR - 你好。还没有,但是,我可以看到几天前有一个新版本 1.9.17。我被承诺在 1.9.16 中修复,所以在圣诞节和新年之间,当我有时间修复它时,我会检查它并回复你。如果我在新年前忘记了,请发表另一条评论作为提醒。 :)
  • @dynamokaj 你能尝试 1.9.17 吗?

标签: google-app-engine google-cloud-endpoints


【解决方案1】:

我已经测试了 1.9.17 版的 Google AppEngine SDK 并且可以确认在 RPC POST 请求中使用对象现在可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2015-07-13
    相关资源
    最近更新 更多