如何在localhost上调用Google Cloud Endpoints RPC API?

时间:2014-10-25 15:30:47

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

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


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

当我在App Engine上部署REST和RPC API时,它们都能很好地工作。然而奇怪的是,当我在本地测试服务(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正确12345username字段为null且{ {1}}字段为userPrivate,即使我将其指定为falsetrue的实例不是UserProfileDto (profile)

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

当我更改上述请求中的url以在app引擎上定位我的应用程序的部署版本时,它可以正常工作。 null

我使用以下方法在localhost上启动服务:

https://<app-name>.appspot.com/_ah/api/rpc?prettyPrint=false

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

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

1 个答案:

答案 0 :(得分:1)

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