【问题标题】:Google Cloud Endpoints API Gets 404Google Cloud Endpoints API 获取 404
【发布时间】:2016-09-25 02:21:27
【问题描述】:

环境
我正在使用 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>

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

【问题讨论】:

  • 检查您的应用日志中是否有对/_ah/spi/BackendService.getApiConfig/_ah/spi/BackendService.logMessages 的请求。如果有错误,您需要修复它们。

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


【解决方案1】:

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

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

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

【讨论】:

  • 我的问题与那个不同。我注意到了这个问题。
【解决方案2】:

因此,不幸的是,这里的问题是大写问题。我有正确的 URL,但尝试加载“myAPI”而不是“MyAPI”,因为我在 MyAPI.java 中编写了它。请注意,在这种情况下,重要的是注释中的值而不是类名。希望这能找到像我一样愚蠢的其他人!

【讨论】:

    【解决方案3】:

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

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

    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 的行已被删除。)

    【讨论】:

    • 感谢您的帮助,见上文,我的问题有点基本(大写不佳)
    猜你喜欢
    • 2017-01-07
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2013-12-30
    • 2018-12-18
    • 2019-08-13
    相关资源
    最近更新 更多