Моя установка содержит конечные точки google с функциями google-cloud в качестве моего бэкэнда.
Конечные точки Google определены с помощью следующего swagger v2 yaml:
swagger: "2.0"
info:
description: "yada..."
version: "0.0.1"
title: "yadada.."
termsOfService: "http://swagger.io/terms/"
contact:
name: "blah"
email: "email@mail.com"
url: "https://example.com"
host: "(generated service url by google when endpoints is deployed, i.e. 'api-gateway-xyz123123-ew.a.run.app')"
tags:
- name: "Documents"
description: "blah"
schemes:
- "https"
paths:
/api/documents:
post:
tags:
- "Documents"
summary: "Add a new document"
description: ""
security:
- firebase: []
operationId: "addDocument"
x-google-backend:
address: "(cloud functions http url)/documents"
consumes:
- "application/json"
produces:
- "application/json"
parameters:
- in: "body"
name: "body"
description: "Document supplied"
required: true
schema:
$ref: "#/definitions/Document"
responses:
201:
description: "The document was successfully created."
schema:
$ref: "#/definitions/Document"
400:
description: "Invalid input. See response for details"
schema:
items:
$ref: "#/definitions/Error"
/api/documents/{document_id}:
get:
tags:
- "Documents"
summary: "Get a document with the given ID"
description: ""
security:
- firebase: []
operationId: "getDocument"
x-google-backend:
address: "(cloud function http url)/documents/"
path_translation: APPEND_PATH_TO_ADDRESS
produces:
- "application/json"
parameters:
- in: "path"
name: "document_id"
description: "ID of the document to modify"
required: true
type: "string"
responses:
200:
description: "success."
schema:
type: "array"
items:
$ref: "#/definitions/Document"
404:
description: "Document not found"
schema:
items:
$ref: "#/definitions/Error"
securityDefinitions:
firebase:
authorizationUrl: ""
flow: "implicit"
type: "oauth2"
x-google-issuer: "https://securetoken.google.com/%%GOOGLE_PROJECT_ID%%"
x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com"
x-google-audiences: "%%GOOGLE_PROJECT_ID%%"
definitions:
(a lot of type definitions)
Это работает с POST Конечная точка без проблем.
Проблема в конечной точке GET REST, где переменная пути неправильно передается в бэкэнд.
Как и в https://cloud.google.com/endpoints/docs/openapi/openapi-extensions Я пытался добавить параметр x-google-backend, как показано в приведенном выше API-интерфейсе swagger. (path_translation: APPEND_PATH_TO_ADDRESS
).
Однако это не работает. Я получаю несанкционированную ошибку (403), так как облачная функция не попадает во внешний интерфейс конечных точек.
В настоящее время я использую уродливый обходной путь без параметра path_translation, который переводит переменную пути конечных точек Google в параметр запроса в облаке Бэкэнд функции с тем же именем. Т.е. в бэкэнде вызывается URL /documents?document_id=xyz
.
(чего я пытаюсь добиться - это передать вызов с URL-адресом бэкэнда /documents/{document_id}
)
Кто-нибудь знает, как настроить путь на основе параметров правильно, чтобы они правильно передавались в бэкэнд облачной функции?
Заранее спасибо.
С уважением, Себастьян