Вызов процедур и функций¶
Каждая процедура и функция, полученная в результате сканирования схемы, публикуется сервисом с префиксом /rpc/
curl "http://localhost:3000/xdac/rpc/function_name" -X POST
Для передачи параметров необходимо включить в тело запроса json, наименование полей которого будет соответствовать наименованию аргументов функции. Для примера создадим функцию следующего вида:
CREATE OR REPLACE FUNCTION api.add_numbers (
first integer,
second integer
)
RETURNS integer AS
$body$
BEGIN
return first + second;
END;
$body$
LANGUAGE 'plpgsql'
Для вызова функции необходимо передать запрос следующего вида:
curl -d '{"first":10,"second":30}' 'http://localhost:3000/xdac/rpc/add_numbers'
40
Каждый вызов процедуры или функции осуществляется в своей транзакции. Наличие оператора COMMIT в теле функции приведет к ошибке.
Правила наименования¶
Все наименования (имена процедур и функций, наименования аргументов) - регистрозависимые.
Для вызова функции с именем StRaNgeNamE необходимо вызвать метод следующим образом:
curl "http://localhost:3000/xdac/rpc/StRaNgeNamE"
Вызов в другом формате приведет к ошибке:
{
"code": "XDAC001",
"hint": "Make sure that routine name is correct or try to reload applicaion",
"message": "Routine strangename was not found in app cache",
"details": ""
}
Вызов процедуры с JSON аргументом¶
Если необходимо передать json внутрь функции или процедуры, необходимо передать заголовки Content-Type: application-jsonи Prefer:params=single-object
curl -H "Content-Type: application/json" -H "Prefer: params=single-object" -d '{"text":"Test message","input":[1,2,3]}' "http://localhost:8088/xdac/rpc/jsonInput"
Сама процедура должна иметь только один аргумент с типом данных json или jsonb:
CREATE OR REPLACE FUNCTION api."jsonInput" (
"myPar" json
)
RETURNS json AS
$body$
begin
return "myPar";
END;
$body$
LANGUAGE 'plpgsql'
Загрузка бинарного файла¶
Для того чтобы передать бинарный файл в процедуру или функцию необходимо, чтобы процедура имела один аргумент с типом bytea, а запрос содержал заголовок “Content-Type: application/octet-stream”
curl "http://localhost:3000/xdac/rpc/upload_binary" \
-X POST -H "Content-Type: application/octet-stream" \
--data-binary "@file_name.ext"
CREATE OR REPLACE PROCEDURE api."upload_binary" (
bytea
)
AS
$body$
BEGIN
insert into api.files(blob)
values ($1);
END;
$body$
LANGUAGE 'plpgsql'