Расширение x-yc-apigateway-integration:cloud_functions
Расширение x-yc-apigateway-integration:cloud_functions
вызывает указанную функцию. В качестве входных данных функция получает информацию о HTTP-запросе и значения параметров, указанных в спецификации, на выходе клиенту возвращается результат выполнения функции.
Добавить расширение в спецификацию можно с помощью конструктора спецификаций.
Поддерживаемые параметры
В таблице ниже перечислены параметры, специфичные для API-шлюза сервиса API Gateway. Описание остальных параметров читайте в спецификации OpenAPI 3.0
Параметр | Тип | Описание |
---|---|---|
function_id |
string |
Идентификатор функции. |
tag |
string |
Необязательный параметр. Тег версии функции. Значение по умолчанию — $latest . В tag осуществляется подстановка параметров. |
service_account_id |
string |
Идентификатор сервисного аккаунта для авторизации при обращении к функции. Если параметр не указан, используется значение верхнеуровневого параметра service_account_id . Если верхнеуровневого параметра тоже нет, функция вызывается без авторизации. |
payload_format_version |
string |
Версия формата запроса к функции. Возможные значения — 0.1 и 1.0 . Версия по умолчанию — 0.1 . |
context |
object |
Необязательный параметр. Контекст операции — произвольный объект в формате YAML или JSON . Передается в функцию внутри запроса в поле requestContext.apiGateway.operationContext . В context осуществляется подстановка параметров. |
Спецификация расширения
Пример спецификации:
/example/{ID}:
get:
summary: Get ID
operationId: getID
tags:
- example
parameters:
- name: ID
in: path
description: Return ID
required: true
schema:
type: string
x-yc-apigateway-integration:
type: cloud_functions
function_id: b095c95icnvb********
tag: "$latest"
service_account_id: ajehfe56hhl********
Пример функции:
exports.handler= async function (data, context) {
return {
'statusCode': 200,
'isBase64Encoded': false,
'body': JSON.stringify({
'petId': data.params.ID
}),
}
};
Структура запроса v0.1
JSON-структура запроса версии 0.1
повторяет структуру запроса к функции с некоторыми дополнительными полями:
{
"url": <фактический путь запроса>,
"path": <путь, соответствующий запросу в спецификации>,
"httpMethod": <название HTTP-метода>,
"headers": <словарь со строковыми значениями HTTP-заголовков>,
"multiValueHeaders": <словарь со списками значений HTTP-заголовков>,
"queryStringParameters": <словарь queryString-параметров>,
"multiValueQueryStringParameters": <словарь списков значений queryString-параметров>,
"requestContext": <словарь с контекстом запроса>,
"body": <содержимое запроса>,
"isBase64Encoded": <true или false>,
"pathParams": <словарь значений параметров пути запроса>,
"params": <словарь значений параметров запроса, описанных в спецификации OpenAPI>,
"multiValueParams": <словарь со списками значений параметров запроса, описанных в спецификации OpenAPI>
}
Структура запроса v1.0
JSON-структура запроса версии 1.0
совместима с форматом запроса AWS API Gateway1.0
и содержит дополнительные поля:
{
"version": <версия формата запроса>,
"resource": <ресурс, соответствующий запросу в спецификации>,
"path": <фактический путь запроса>,
"httpMethod": <название HTTP-метода>,
"headers": <словарь со строковыми значениями HTTP-заголовков>,
"multiValueHeaders": <словарь со списками значений HTTP-заголовков>,
"queryStringParameters": <словарь queryString-параметров>,
"multiValueQueryStringParameters": <словарь списков значений queryString-параметров>,
"requestContext": <словарь с контекстом запроса>,
"pathParameters": <словарь значений параметров пути запроса>,
"body": <содержимое запроса>,
"isBase64Encoded": <true или false>,
// дополнительные поля:
"parameters": <словарь значений параметров запроса, описанных в спецификации OpenAPI>,
"multiValueParameters": <словарь со списками значений параметров запроса, описанных в спецификации OpenAPI>,
"operationId": <operationId, соответствующий запросу в спецификации OpenAPI>
}
Структура элемента requestContext
:
{
"identity": <набор пар ключ:значение для аутентификации пользователя>,
"httpMethod": <DELETE, GET, HEAD, OPTIONS, PATCH, POST или PUT>,
"requestId": <идентификатор запроса, который генерируется в роутере>,
"requestTime": <время запроса в формате CLF>,
"requestTimeEpoch": <время запроса в формате Unix>,
"authorizer": <словарь с контекстом авторизации>,
"apiGateway": <словарь со специфичными данными, передаваемыми API-шлюзом при вызове функции>,
"connectionId": <идентификатор веб-сокетного соединения>",
"connectedAt": <время подключения веб-сокетного соединения>,
"eventType": <тип события или операции с веб-сокетом: CONNECT, MESSAGE, DISCONNECT>,
"messageId": <идентификатор сообщения, полученного из веб-сокета>,
"disconnectStatusCode": <статус-код закрытия веб-сокета>,
"disconnectReason": <текстовое описание причины закрытия веб-сокета>
}
Структура элемента authorizer
:
{
"jwt": { // Поле, которое заполняет JWT-авторайзер API Gateway. Содержит данные из токена о пользователе и его правах'
"claims": <словарь полей тела JWT>,
"scopes": <список прав владельца JWT>
}
// Другие поля контекста авторизации, возвращаемые из функции-авторайзера
}