Расширение 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 | 
Идентификатор сервисного аккаунта для авторизации при обращении к функции. Сервисный аккаунт необходим для вызова приватной функции — для этого он должен иметь роль functions.functionInvoker или выше на эту функцию. Если параметр не указан, используется значение верхнеуровневого параметра 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>
        }
        // Другие поля контекста авторизации, возвращаемые из функции-авторайзера
    }