Google Cloud Endpoints API获取404

时间:2016-09-25 02:21:28

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

环境
我正在使用Bootstrap JavaScript UI和Google SQL数据存储区运行AppEngine Cloud Endpoints。

问题
当Javascript调用gapi.client.load时,它获得404.API Explorer工作,JavaScript在本地运行时工作...只是在尝试通过JavaScript加载API时,我得到了失败。

以下是Chrome中显示的错误:

GET https://MyAppID.appspot.com/_ah/api/discovery/v1/apis/myAP…%2Cversion%2CrootUrl%2CservicePath%2Cresources%2Cparameters%2Cmethods&pp=0 404       ()
zu @ cb=gapi.loaded_0:83
n @ cb=gapi.loaded_0:83C
u @ cb=gapi.loaded_0:83
(anonymous function) @ cb=gapi.loaded_0:84
g @ cb=gapi.loaded_0:55
c @ cb=gapi.loaded_0:46

然后是“无法读取属性”的另一个例外,因为它无法在API中找到它未加载的方法。

代码

我的index.html页面的代码:

        function init() 
        {

            apisToLoad = 2;

            var callback = function() 
            {
                if (--apisToLoad == 0) 
                {
                      signin(true, userAuthed);
                   }
            }

            gapi.client.load('oauth2', 'v2', callback);
            //LOCALCHANGE (SWITCH BETWEEN LOCAL AND NOT)
            gapi.client.load('myAPI', 'v1', callback, 'https://MyAppId.appspot.com/_ah/api');
            //gapi.client.load('myAPI', 'v1', callback, 'http://localhost:8080/_ah/api');

        }

我认为这是对的,所以我也要包括我的appengine.xml:

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>MyAppID</application>
<version>1</version>
<threadsafe>true</threadsafe>
<use-google-connector-j>true</use-google-connector-j>

<system-properties>
    <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
</system-properties>
</appengine-web-app>

和我的web.xml:

<?xml version="1.0" encoding="utf-8" standalone="no"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
    <servlet-name>SystemServiceServlet</servlet-name>
    <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
    <init-param>
        <param-name>services</param-name>
        <param-value>com.lthoi.myAPI</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>SystemServiceServlet</servlet-name>
    <url-pattern>/_ah/spi/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

如果有人能想到其他任何错误,我会很乐意粘贴其他文件。

3 个答案:

答案 0 :(得分:0)

我和你有同样的问题。似乎谷歌有一个关于webapp端点的故障,这已经导致了这个问题很长一段时间......

以前关于它的帖子的链接: https://github.com/google/google-api-javascript-client/issues/147

(将帖子作为答案,而不是评论,只是创建了一个帐户)

答案 1 :(得分:0)

gapi.client.load查询发现以获取有关API的方法信息(请参阅为您提供404的URL上的发现部分)。目前,云端点不支持发现。

要解决此问题,您可以尝试直接调用API(实际上我并不完全确定这是否有效)。 e.g。

gapi.client.request({
  // Use your own service address, URI path, and query parameters.
  'root': 'https://your-domain.appspot.com',
  'path': '_ah/api/foo/bar', // use your own service path
  'params': {
    "foo": "bar"
  }
}).then(
  function(resp) {
    console.log(resp);
  },
  function(err) {
    console.log(err);
});

希望这有帮助。

(请注意,此回复的上一个编辑中的CORS功能是实验性的,未记录的,并且不受支持,但在本答案中用于调试目的。已删除启用CORS的行。)

答案 2 :(得分:0)

所以,不幸的是,这里的问题是资本化问题。我有正确的网址,但我尝试加载“myAPI”#39;而不是MyAPI&#39;正如我在MyAPI.java中写的那样。请注意,它是注释中的值,而不是在这种情况下重要的类名。希望这能找到像我一样愚蠢的人!