20

我开始在我的 GAE 项目中使用云端点,但遇到了 API 未在服务器上更新的问题。

  • localhost:8888/_ah/api/explorer 没问题。

但是当我部署时,没有任何变化。

  • myapp.appspot.com:8888/_ah/api/explorer 不好

进一步调查显示 url 端点更新示例:https ://myapp.appspot.com/_ah/api/myapp/v1/foo/list

但是加载的客户端api仍然不正确。例如:gapi.client.load('myapp', 'v1', callback, url); gapi.client.myapp.foo.list();

如果我将调用从 foo/list 更改为 foo/list2,其余 url 会更新,api 包不会。

4

6 回答 6

22

我将尝试涵盖人们可能遇到的两种情况:

客户端:

Google APIs Explorer Web 应用程序会主动缓存,因此当您更新 API 服务器端以查看客户端中的更改时,您需要清除缓存或强制刷新。

服务器端(在已部署的生产 App Engine 应用中):

如果您遇到部署问题,调试时有两个地方可以查看:

  • 部署后检查您的管理员日志 ( https://appengine.google.com/adminlogs?&app_id=s~YOUR-APP-ID )。成功部署应用程序代码后,您应该会看到以下消息:

    Completed update of a new default version
    

    不久之后,您应该会看到:

    Successfully updated API configuration
    

    如果此消息表明 API 配置更新失败,则应重新部署。如果上述错误持续存在,您应该将错误通知我们。如果您没有看到任何关于您的 API 配置的消息,您应该检查该路径/_ah/spi/.*是否在您的路由配置中明确命名(app.yaml对于 Python,web.xml对于 Java)。

  • 部署后检查您的应用程序日志 ( https://appengine.google.com/logs?&app_id=s~YOUR-APP-ID )。部署完成后,Google 的 API 基础架构会向您的应用程序发出请求,/_ah/spi/BackendService.getApiConfigs以便您的 API 配置(作为 JSON)可以注册到 Google 的 API 基础架构,并可以创建所有与发现相关的配置。如果此请求没有以 200 完成,那么您的 API 更改将不会显示,因为 Google 的 API 基础架构将没有任何可注册的内容。

  • 如果您始终收到302对 的请求的重定向/_ah/spi/BackendService.getApiConfigs,那是因为您(或您生成的 API 配置)已指定一个“bns 适配器”http:用作 API 根中的协议,但您的web.xml(Java) 或app.yaml(Python) 是必需的通过的路径/_ah/spi是安全的。这将使用http:作协议的请求被重定向(使用302)到与https:协议相同的页面。在进行实验之前,已在 Trusted Tester 论坛上对此进行了讨论。

于 2013-02-25T01:28:03.460 回答
2

这就是发生在我身上的事情。

我在 localhost 上测试了我的端点,它运行良好。

我在 apppot 上部署了我的端点,当我向它发出请求时,我在浏览器中收到了“未找到”消息。

所以我查看了日志,当我向端点发出请求时,我在 favicon 文件上看到了 404 http 错误代码。实际上我忘了把那个文件放在我的部署中。

所以我用 favicon 文件重新部署了我的战争,404 http 代码消失了,端点在 apppot 上也能正常工作!

我意识到这可能听起来很愚蠢,但这是我所经历的。(我为我糟糕的英语道歉)

于 2013-06-17T10:59:26.510 回答
1

我注意到,如果您第一次上传您的应用程序,而您的 web.xml 中没有以下内容:

 <security-constraint>
        <web-resource-collection>
            <url-pattern>/_ah/spi/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>

然后你的 bns 适配器将被设置为 http。当我之后添加上述内容时,我在 /_ah/spi/BackendService.getApiConfigs 上获得 302 http 代码,并且端点永远不会更新。

所以现在我已经恢复到不在 /_ah/spi 上使用 https 并且我的端点正在更新。我猜对于那些看到他们的端点没有被更新的人来说,他们会恢复到他们在 /_ah/spi/ 上为 ssl 设置的第一个配置。

偏航。

于 2013-03-06T11:45:56.027 回答
0

当我使用此 URL 调用我的 API 时,我遇到了相同的错误Not Found (404 错误代码)

https://MY_APP_ID.appspot.com/_ah/api/MY_SERVICE/v1/user

我尝试了所有方法,最后通过从WEB-INF中删除发现文件并仅保留MY_SERVICE-v1.api 来修复它,然后重新部署 API。它现在工作正常。

于 2013-08-08T17:22:44.420 回答
0

在部署新版本后,我也得到了陈旧的 API 发现文档,GAE 花了几分钟才开始为我提供新版本。

于 2013-08-31T15:35:48.847 回答
0

我遇到了同样的问题,我检查了管理日志、其他日志等……但我的 API 仍然没有更新到最新版本。

所以我决定检查我编写的最后一个方法的 API 代码(我正在使用 Java 7 编写)。我发现 GAE 不喜欢这样的陈述:

if (!blocked){ .... }

我将其切换为:

if (blocked == false) { ... }

它就像一个魅力。所以从表面上看,GAE 会扫描新的 API 方法并且不接受某些快捷方式。

于 2017-07-13T20:13:39.113 回答