Пользовательский домен Google Cloud Endpoints v2 с нестандартным сервисом ядра приложения

Я успешно развернул API Google Cloud Endpoints v2 и бэкэнд App Engine для endpoint-dot-example.appspot.com и я вижу метрики в консоли конечных точек.

build.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>

web.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.com в example.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>

0 ответов

Чтобы решить эту проблему, используйте настраиваемый базовый путь для API конечных точек.

Кажется /_ah/ URL-адреса могут обходить правила отправки из dispatch.yaml, особенно с нестандартными службами. Но с настраиваемым базовым путем, которого нет/_ah/, они работают нормально.

Вот пример на Python нестандартной службы, запускающей API в api.example.com/api/v1/*.

app.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])

dispatch.yaml:

# Send requests to api.example.com to the "api" service
- url: "api.example.com/*"
  service: api
Другие вопросы по тегам