如何使用promises模式

时间:2016-05-30 14:41:34

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

我有一个Web应用程序,它使用Google API JavaScript客户端库调用多个App Engine端点。

我正在按照Google(https://developers.google.com/api-client-library/javascript/features/promises#using-promises)的建议将此应用程序从回调模式更改为承诺模式,我遇到了问题。请注意,该应用程序适用于回调模式。

我对promises模式的问题是找到在调用请求方法时要使用的正确的路径参数

JavaScrit代码:

var params = {'webSafeKeyParent’: ‘neN4fm15xW52b2ljZXMtb19saW5lmlYLEglBY1NFwpRpdHkYgICAgQj97AoM’};
gapi.client.request({
      'path': 'https://myappenginename.appspot.com/_ah/api/customerApi/v1/?????????',
      'params': params
}).then(function(response) {
        // Handle response       
}, function(reason) {
        // Handle error
});

“customerApi”中的端点定义:

@ApiMethod(
        name = "listByParent",
        path = "customerByParent/{webSafeKeyParent}",
        httpMethod = ApiMethod.HttpMethod.GET,
        scopes = {Constants.EMAIL_SCOPE},
        clientIds = {Constants.WEB_CLIENT_ID, com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID},
        audiences = {Constants.ANDROID_AUDIENCE})
public List<Customer> listByParent(final User user, @Named("webSafeKeyParent") final String webSafeKeyParent, @Nullable @Named("cursor") String cursor, @Nullable @Named("limit") Integer limit) throws UnauthorizedException {

对于我的一些端点,它的工作原理是在JavaScript请求方法的path参数中包含@ApiMethod注释中声明的“path”和“name”的值。

即。对于上述端点,以下路径有效: https://myappenginename.appspot.com/_ah/api/customerApi/v1/customerByParent/listByParent

奇怪的是,这不适用于同类的其他一些端点。我收到404 HTTP错误或503错误。

当您使用API​​ Explorer查询端点时,我也尝试使用“请求”下显示的路径,但没有成功....

是否有关于如何使用Google API JavaScript客户端库调用带有承诺的App Engine端点的详细文档?我还没找到。你有什么建议可以分享吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

实际上,请求方法使用“path”参数工作所有时间,该参数由@ApiMethod注释中声明的“path”和“name”的值组成...

如果它对某些端点不起作用,那就是我的错误。但是,不知道哪个错误。

请注意,我注意到向JavaScript请求方法传递App Engine端点的正确httpMethod非常重要。默认情况下,请求methid假定它是GET。如果你的端点在@ApiMethod注释中有httpMethod = ApiMethod.HttpMethod.POST,你应该传递参数'method':'POST',详见doc:https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiclientrequestargs