Вызов процедур и функций

Каждая процедура и функция, полученная в результате сканирования схемы, публикуется сервисом с префиксом /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:3000/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'