Начало работы
В этой инструкции вы создадите и протестируете работу разных типов расширений: сначала вы сконфигурируете API-шлюз для получения статического ответа, а затем добавите интеграцию для вызова функции.
Перед началом работы
Чтобы начать работать в Yandex.Cloud:
- Войдите в консоль управления. Если вы еще не зарегистрированы, перейдите в консоль управления и следуйте инструкциям.
- На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его. - Если у вас еще нет каталога, создайте его.
Создайте API-шлюз
Создайте API-шлюз и обратитесь к нему.
Чтобы создать API-шлюз:
-
В консоли управления выберите каталог, в котором необходимо создать API-шлюз.
-
В списке сервисов выберите API Gateway.
-
Нажмите кнопку Создать API-шлюз.
-
В поле Имя введите
numbers
. -
(опционально) В поле Описание введите описание.
-
В блок Спецификация добавьте спецификацию:
openapi: "3.0.0" info: version: 1.0.0 title: Test API paths: /hello: get: summary: Say hello operationId: hello parameters: - name: user in: query description: User name to appear in greetings required: false schema: type: string default: 'world' responses: '200': description: Greeting content: 'text/plain': schema: type: "string" x-yc-apigateway-integration: type: dummy http_code: 200 http_headers: 'Content-Type': "text/plain" content: 'text/plain': "Hello, {user}!\n"
-
Нажмите кнопку Создать.
-
Обратитесь к API-шлюзу.
-
В открывшемся окне нажмите на созданный API-шлюз.
-
Скопируйте значение поля Домен и сформируйте ссылку вида:
https://<домен>/hello?user=API
. Должна получиться ссылка вида:https://falrnjna8r5vj88ero6a.apigw.yandexcloud.net/hello?user=API
-
Обратитесь к API-шлюзу, используя одну из команд:
curl https://falrnjna8r5vj88ero6a.apigw.yandexcloud.net/hello?user=API curl https://falrnjna8r5vj88ero6a.apigw.yandexcloud.net/hello
-
Добавьте интеграцию с функцией
Создайте функцию
Создайте функцию для получения списка чисел. Подробнее о функциях читайте в документации Cloud Functions.
Чтобы создать функцию:
- Создайте функцию:
- В консоли управления выберите каталог, в котором будет создана функция.
- Нажмите кнопку Создать ресурс.
- Выберите Функция.
- В поле Имя введите
list
. - Нажмите кнопку Создать.
- Сделайте функцию публичной.
- Создайте версию функции:
-
В открывшемся окне выберите созданную функцию.
-
В разделе Последняя версия нажмите кнопку Создать в редакторе.
-
В открывшемся окне в поле Среда выполнения выберите
nodejs12
. -
В поле Способ выберите редактор кода.
-
Ниже в редакторе нажмите кнопку Создать файл.
- В открывшемся окне введите имя файла
index.js
. - Нажмите кнопку Создать.
- В открывшемся окне введите имя файла
-
Вставьте следующий код в файл
index.js
:module.exports.handler = async (event) => { return { "statusCode": 200, "headers": {"content-type": "application/json"}, "body": "[0, 1, 2]" }; };
-
В поле Точка входа введите
index.handler
. -
Нажмите кнопку Создать версию.
-
Расширьте спецификацию API-шлюза
Добавьте в спецификацию API-шлюза информацию о функции.
Чтобы обновить спецификацию API-шлюза:
-
В консоли управления выберите каталог, в котором необходимо обновить API-шлюз.
-
В открывшемся окне выберите API-шлюз и нажмите кнопку .
-
В открывшемся меню нажмите кнопку Редактировать.
-
В блок Спецификация добавьте расширенную версию спецификации
Добавлен метод
/numbers
, который с помощью расширенияx-yc-apigateway-integration
типаcloud_functions
вызывает функцию по идентификатору.Чтобы API-шлюз корректно отработал, в параметре
function_id
укажите идентификатор функции, которую хотите вызывать.Чтобы API-шлюз смог обратиться к приватной функции, в параметре
service_account_id
укажите сервисный аккаунт с правами на вызов функции.openapi: "3.0.0" info: version: 1.0.0 title: Test API paths: /hello: get: summary: Say hello operationId: hello parameters: - name: user in: query description: User name to appear in greetings required: false schema: type: string default: 'world' responses: '200': description: Greeting content: 'text/plain': schema: type: "string" x-yc-apigateway-integration: type: dummy http_code: 200 http_headers: 'Content-Type': "text/plain" content: 'text/plain': "Hello, {user}!\n" /numbers: get: summary: List some numbers operationId: listNumbers responses: '200': description: Another example content: 'application/json': schema: type: "array" items: type: "integer" x-yc-apigateway-integration: type: cloud_functions function_id: <ID функции> service_account_id: <ID сервисного аккаунта>
Обратитесь к функции через API-шлюз
Примечание
Чтобы API-шлюз смог обратиться к функции, сделайте ее публичной или укажите в спецификации сервисный аккаунт, у которого есть права на вызов функции.
Обратитесь к API-шлюзу:
curl https://falrnjna8r5vj88ero6a.apigw.yandexcloud.net/numbers
[0, 1, 2]