在 GAE 上使用端点 V2 进行版本控制

Versioning with endpoint V2 on GAE

我已经部署了我的应用程序的实时版本及其端点(没问题)。 我还希望能够轻松测试其他版本(例如暂存)。

使用端点 V1:没问题。

使用端点 V2: 如果我部署到实时版本(在 https://[PROJECT-ID].appspot.com 但不适用于其他版本。

,一切正常

https://staging-dot-[PROJECT-ID].appspot.com部署到staging后部署成功,但是当前端调用后端时,请求被后端接收(我可以在GAE日志和跟踪列表中看到),但是它没有到达或通过 endpointV2 并响应 404 NOT FOUND:

"errors": [ { "domain": "global", "reason": "notFound", "message": "\u003chtml\u003e\u003chead\u003e\n\u003cmeta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\"\u003e\n\u003ctitle\u003e404 NOT_FOUND\u003c/title\u003e\n\u003c/head\u003e\n\u003cbody text=#000000 bgcolor=#ffffff\u003e\n\u003ch1\u003eError: NOT_FOUND\u003c/h1\u003e\n\u003c/body\u003e\u003c/html\u003e\n" }

我现在使用以下 Maven 插件:

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>appengine-maven-plugin</artifactId>
    <version>1.3.1</version>
    <configuration>
        <!-- deploy configuration -->
    </configuration>
</plugin>
<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>endpoints-framework-maven-plugin</artifactId>
    <version>1.0.0</version>
</plugin>

我已经调整了 appengine.xml 和 Google 云插件中的版本。如何配置端点以使用特定模块版本而不是仅使用主版本?

虽然不是真正的答案,但我看到了这个:

部署旧式端点 (V1) 时,一切正常,https://3-dot-xx.appspot.com/_ah/api/discovery/v1/apis 将显示部署到版本 3

的 API

部署新型端点 (v2) 时,例如 2-dot-,它取决于版本上部署的最后一个 V1 端点。

  • 如果它是之前没有部署过 V1 端点的新版本,它可以工作并且新端点显示在 2-dot-
  • 如果之前这里部署了V1端点,访问时会显示旧的V1 api,自然会生成404,因为实际运行 GAE版本不同
  • 如果版本从未部署(例如 asdf-dot-),或使用默认版本(没有 -dot- 等),它将显示默认版本并正确访问它。
  • 如果从未部署过 V1 服务,而是部署了 V2 服务,则在部署新的 V2 服务时它可以正常工作

因此,如果您已经拥有 V1 服务 运行,似乎有一个错误会阻止您在测试/暂存环境中使用稳定的名称。如果来自 Google 的人可以确认此错误并在我必须进行大量代价高昂的更改以更改 URL 之前提出适当的解决方法,那将非常有帮助。

我的简短回答是:不要重复使用之前用于 endpointV1 的版本名称

例如我有一个 testing-dot-MYPROJECT.appspot.com.

我现在使用不同的版本:test-dot-MYPROJECT.appspot.com

如需详细答案,请查看 cputoaster 的答案。