Модель программирования на языке Kotlin
Сервис Cloud Functions предоставляет две модели программирования на языке Kotlin — с помощью функций верхнего уровня и интерфейса YcFunction. Интерфейс YcFunction
в отличие от функций верхнего уровня дает доступ к контексту вызова.
Обе модели программирования позволяют взаимодействовать с сервисами Yandex Cloud при помощи SDK. Для этого добавьте SDK в зависимости Gradle.
Обособленные типы данных
Для моделей программирования на языке Kotlin есть несколько обособленных типов: InputStream
, String
и ByteArray
. Работа с ними отличается от работы с другими типами. Если аргумент в функции-обработчике принимает обособленный тип, среда выполнения не преобразовывает входящий HTTPS-запрос в JSON-интерпретацию. Вместо этого среда выполнения передает запрос напрямую в пользовательский обработчик.
Работа с обособленными типами отличается, когда они становятся Nullable
. Допустим, тело входного запроса — null
, и пользователь вызвал функцию с параметром ?integration=raw. Результат, который получает обработчик, зависит от типа агрумента:
- Если аргумент принимает тип
String?
, обработчику передается значениеnull
. - Если аргумент принимает тип
String
, обработчику передается строка, которая содержит текстnull
.
Примечание
В качестве библиотеки для сериализации и десериализации из JSON используется Moshi
Требования к обработчику
Вне зависимости от выбранной модели загрузка проекта осуществляется одним из способов: в виде исходного кода, JAR-архива или Gradle-проекта. Также к классам с обработчиками применяются требования, которые различаются в зависимости от модели программирования:
-
Для функции верхнего уровня:
- Функция должна быть публичной.
- Она не должна быть обобщенной
.
-
Для интерфейса
YcFunction
:-
Класс, содержащий функцию-обработчик, должен быть публичным.
-
У класса должен быть публичный конструктор без аргументов.
По умолчанию он есть. Но если вы создали свой конструктор, принимающий аргументы, создайте также конструктор, не принимающий никаких аргументов.
-
Класс не должен быть обобщенным.
-