1

我有一项服务已成功部署到 Google Endpoints,并且可以通过浏览器访问。

现在我正在尝试加载 Google API javascript 客户端库以使用 javascript 调用我的服务。

据我所知,我应该这样做

gapi.client.load([MY_APP_NAME], 'v1', function() {
   var request = gapi.client.[API_NAME].[SERVICE_NAME].[METHOD]();
   request.execute(function(jsonResp, rawResp) {...});
   );

但我总是在运行时遇到异常,抱怨gapi.client.[MY_API_NAME]未定义。我对任何 Google API(例如 Plus)都做同样的事情,而且效果很好。例如,如果我加载 'plus' API,我将可以访问 gapi.client.plus... 并且可以调用方法。

我错过了什么吗?所有示例和文档都是关于 Google 服务 API 的,我找不到自定义 API 的示例(开发人员编写的那个)。

我什至尝试了使用不同路径(绝对路径和相对路径)的 gapi.client.request,但我得到 404 - Not Found error in "status"。

var request = gapi.client.request({'path':
'https://[APP_NAME].appspot.com/_ah/api/[SERVICE_NAME]/v1/[METHOD]'
, 'method': 'GET'});
request.execute(function(jsonResp, rawResp) {...});


var request = gapi.client.request({
'path':'/[SERVICE_NAME]/v1/[METHOD]',
'method': 'GET'});
request.execute(function(jsonResp, rawResp) {...});
4

1 回答 1

10

问题是调用 gapi.client.load() 时缺少参数。

我在此链接https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiclientload查看了 gapi.client.load 的定义

gapi.client.load(name, version, callback)

后来我发现这并不完全正确,并且缺少一个可选参数(app_api_root_url)。

gapi.client.load(name, version, callback, app_api_root_url)

如果缺少 app_api_root_url,则仅为 Google 服务 API 加载客户端(app_api_root_url 例如https://myapp.appspot.com/_ah/api

您可以在此链接https://developers.google.com/appengine/docs/java/endpoints/consume_js找到有关如何正确使用 gapi.client.load() 的更多详细信息

正如您在下面的代码中看到的那样,我在调用gapi.client.load时没有ROOT参数,这就是为什么 Google 默认查看自己的服务 API 并且显然找不到我的 API 的原因。

   var ROOT = 'https://your_app_id.appspot.com/_ah/api';

   gapi.client.load('your_api_name', 'v1', function() {

      var request = gapi.client.your_api_name.your_method_name();
      request.execute(function(jsonResp, rawResp) {
                        //do the rest of what you need to do
                      });

   }, ROOT);

注意:your_app_id在 ROOT 参数中仅用于加载客户端脚本。加载完成后,您将拥有一个以您的 API而不是您的应用程序命名的对象。该对象就像您的 Java(服务)类,您可以使用它直接调用方法。

于 2013-08-15T23:15:10.443 回答