Использование интерфейса YcFunction для обработчика на Java
Чтобы создать обработчик на Java, вы можете реализовать интерфейс YcFunction
Пример корректного обработчика:
import yandex.cloud.sdk.functions.YcFunction;
import yandex.cloud.sdk.functions.Context;
public class Handler implements YcFunction<Integer, String> {
@Override
public String handle(Integer i, Context c) {
return String.valueOf(i);
}
}
Важно
Указывайте два значения для параметров типа YcFunction
: первый тип является типом входного аргумента, второй — типом возвращаемого значения. Для метода handle
не забудьте передать второй аргумент — контекст вызова.
Примеры некорректных обработчиков:
import yandex.cloud.sdk.functions.YcFunction;
import yandex.cloud.sdk.functions.Context;
// у YcFunction указан лишь один тип параметра
// у Handler не должно быть типов-параметров (см. требования к обработчику)
public class Handler<T> implements YcFunction<T, Integer> {
@Override
public Integer handle(T i, Context c) {
return 2;
}
}
import yandex.cloud.sdk.functions.YcFunction;
import yandex.cloud.sdk.functions.Context;
// у YcFunction не указаны оба типа параметра
public class Handler implements YcFunction {
@Override
public Object apply(Object i, Context c) {
return i;
}
}
Можно использовать любые классы в качестве входного и возвращаемого типов.
Примечание
Поля этих классов могут иметь любые модификаторы доступаgetter
/setter
необязательно.
Пример: вывод информации о функции
Следующая функция получает на вход число, выводит данные о функции, взятые из контекста вызова, в журнал выполнения и возвращает данные о том, является ли переданное число четным.
Важно
Функцию необходимо вызывать с помощью CLI Yandex Cloud или с помощью HTTP-запроса с параметром ?integration=raw
.
Файл Handler.java
:
import yandex.cloud.sdk.functions.YcFunction;
import yandex.cloud.sdk.functions.Context;
public class Handler implements YcFunction<Integer, Boolean> {
private String format(String f, String s) {
return String.format(f, s);
}
@Override
public Boolean handle(Integer number, Context c) {
System.out.println(format("Function name: %s", c.getFunctionName()));
System.out.println(format("Function version: %s", c.getFunctionVersion()));
// если не выбран сервисный аккаунт, напечатается пустая строка
System.out.println(format("Service account token: %s", c.getTokenJson()));
return number % 2 == 0;
}
}
Пример входных данных:
41
В журнале будет напечатано:
Function name: <название_функции>
Function version: <идентификатор_версии_функции>
Service account token: <токен_сервисного_аккаунта>
Возвращаемая строка:
false