1

我已经成功部署了一个 Google Cloud Endpoints v2 API 和一个 App Engine 后端endpoint-dot-example.appspot.com,我可以在端点控制台中看到指标。

构建.gradle:

endpointsServer {
    hostname = "endpoint-dot-example.appspot.com"
}

appengine-web.xml:

<env-variables>
    <env-var name="ENDPOINTS_SERVICE_NAME" value="endpoint-dot-example.appspot.com"/>
</env-variables>

网页.xml:

<filter>
    <filter-name>endpoints-api-controller</filter-name>
    <filter-class>com.google.api.control.extensions.appengine.GoogleAppEngineControlFilter</filter-class>
    <init-param>
        <param-name>endpoints.projectId</param-name>
        <param-value>example</param-value>
    </init-param>
    <init-param>
        <param-name>endpoints.serviceName</param-name>
        <param-value>endpoint-dot-example.appspot.com</param-value>
    </init-param>
</filter>

我现在希望从自定义域提供这个 API。为此,我将一个 URL 路由api.example.comexample.appspot.com我的注册表并更改了 build.gradle 中的主机名:

endpointsServer {
    hostname = "api.example.com"
}

但是在使用自定义域发出请求时出现 404 错误。我还可以在堆栈驱动程序日志中查看默认服务的日志。如何告诉应用引擎将请求路由到 API?

编辑 1 这是 404 响应正文:

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <title>404 NOT_FOUND</title>
</head>
<body text=#000000 bgcolor=#ffffff>
    <h1>Error: NOT_FOUND</h1>
</body>

4

1 回答 1

0

解决此问题的方法是为 Endpoints API 使用自定义基本路径。

似乎/_ah/URL 可以绕过来自 的调度规则dispatch.yaml,尤其是对于非默认服务。但是使用不是的自定义基本路径/_ah/,它们可以正常工作。

这是一个在 Python 中运行 API 的非默认服务的示例api.example.com/api/v1/*

应用程序.yaml:

- url: .*
  script: api.app

api.py:

api_collection = endpoints.api(
    name='api',
    version='v1',
    base_path='/',
    description='Example API',
    api_key_required=False,
    scopes=[],
    audiences=[])

app = endpoints.api_server([api_collection])

调度.yaml:

# Send requests to api.example.com to the "api" service
- url: "api.example.com/*"
  service: api
于 2019-08-19T20:07:07.983 回答