Пользовательский домен 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