13 KiB
Взаимодействие с модулем через API
Доступ к модулю по API контролируется с помощью компонентов APIComponent. Есть несколько типов таких компонентов, каждый из которых отвечает за свой набор функционала.
Все API запросы работают по ссылкам вида https://platform.stratpro.hse.ru/pu-username-pa-appname/<api>.
Здесь pu-username-pa-appname - название приложения, оно же указано в пункте namespace во всех компонентах приложения.
Файловый API
Работа с файловым API
URL запросов к файловому API имеют вид https://platform.stratpro.hse.ru/pu-username-pa-appname/files/box-name/<path>.
Здесь box-name - это имя компонента DataBox, к которому обращается запрос.
Файловый API позволяет загружать файлы в файловое хранилище и получать уже загруженные файлы. Загрузка папок со всем содержимым не предусмотрена, в таких случаях предполагается автоматизация запросов на загрузку отдельных файлов.
<path> в запросах к файловому API может быть путём как к файлу, так и к файловой группе (папке). Тип пути определяется так:
- Если путь состоит из одного сегмента, это файловая группа.
.../files/box-name/data- путь к файловой группеdata. - Если путь состоит из нескольких сегментов, и заканчивается на
/, это путь к файловой группе..../files/box-name/data/images/- путь к файловой группеdata/images. - Если путь состоит более, чем из одного сегмента, и заканчивается не на
/, это путь к файлоу..../files/box-name/data/images/example.png- путь к файлуexample.png, расположенному в файловой группеdata/images
Названия файлов не влияют на то, указывает ссылка на файл или на файловую группу. Например, .../files/box-name/example.png - это путь к файловой группе, а не файлу.
Загрузка файлов через сервис files
Для загрузки файла можно использовать следующий запрос PUT:
curl -X PUT https://platform.stratpro.hse.ru/pu-username-pa-appname/files/box-name/my_dir/my_file.txt -H "Content-Type: application/json" -u "developer:<password>"
Это запрос:
- К приложению
pu-username-pa-appname. - К файловому API (у которого endpoint всегда
files). - К ящику
box-name. - К пути
my_dir/my_file.txtвнутри ящика. - От имени пользователя модуля
developer, пароль которого -<password>.
Даже если запрос верный, сам файл на данном этапе не создаётся. Вместо этого должен прийти ответ в формате JSON:
{
"name": "pu-username-pa-appname/files/box-name/my_dir/my_file.txt",
"presigned_put_url": "<Длинная pre-signed ссылка загрузки>"
}
С помощью pre-signed ссылки можно уже загрузить сам файл следующим запросом:
curl -X PUT -T local/path/to/my_file.txt "<Длинная pre-signed ссылка загрузки>"
Здесь local/path/to/my_file.txt - локальный путь к файлу.
Скачивание файлов через сервис files
Для скачивания нужно сделать запрос такого же формата, как для загрузки файла, но запрос GET.
curl -X GET https://platform.stratpro.hse.ru/pu-username-pa-appname/files/box-name/my_dir/my_file.txt -H "Content-Type: application/json" -u "developer:<password>"
Ответ такой же, как при загрузке - pre-signed ссылка в формате json, но теперь на скачивание.
{
"name": "pu-username-pa-appname/files/box-name/my_dir/my_file.txt",
"presigned_get_url": "<Длинная pre-signed ссылка скачивания>"
}
GET-запрос к файловой группе возвращает список файлов, которые она содержит.
{
"name": "pu-username-pa-appname/files/box-name/my_dir/",
"files": [
{
"name": "pu-username-pa-appname/files/box-name/my_dir/file1.png",
"presigned_get_url": "<Длинная pre-signed ссылка скачивания>"
},
{
"name": "pu-username-pa-appname/files/box-name/my_dir/file2.txt",
"presigned_get_url": "<Длинная pre-signed ссылка скачивания>"
}
]
}
ML-компонент
ML-компоненты проводят расчёты при получении соответствующих запросов и присылают результат в ответе на запрос.
Каждый развёрнутый ML-компонент содержит OpenAPI спецификацию с информацией о себе. Её можно получить следующим запросом:
curl -X GET https://platform.stratpro.hse.ru/pu-username-pa-appname/API_NAME/modelversion -H "Content-Type: application/json" -u "<username>:<password>"
Тело запроса на выполнения расчёта - это объект с полями, которые в точности копируют поля из функции inference в MLComponent.
inputs- список входных данных, где каждый элемент - это словарь. Ключи словаря:name- название, произвольная строка, используется в коде модуля. Например,"image".datatype- тип входных данных, одна из строк"FP32", "FP64", "INT32", "FILE", "str", "dict".content_type- тип содержимого файла, если тип входной переменнойdatatype- это"FILE". Обычно предполагается MIME-type. Например,application/json,text/csv. Для специализированных данных тип может быть любым -bed,docxи так далее.data- строка с путём к входному файлу или одномерный список входных данных соответствующего типа.shape- размерность входной переменной как массива, применимо даже к файлам.
output_fields- список выходных данных, где каждый элемент - это словарь. Ключи словаря:name,datatype,content_type- аналогичноinputsdata- строка с путём к выходному файлу. Если передаётсяdata, результат будет записан в переданный файл. Иначе - записан во временный файл и возвращён в ответ на запрос.
model_parameters- список пар[name, value], произвольных параметров примитивных типов. Передаются в качестве переменнойparametersв расчётную функцию.
Пример запроса
Пример тела запроса к ML-компоненту
{
"inputs": [
{
"name": "image",
"data": "uploads/test_image.png",
"datatype": "FILE",
"content_type": "image/png",
"shape": [128, 128]
}
],
"output_fields": [
{
"name": "predict",
"datatype": "INT32"
}
]
}
Запрос, с файлом data.json в его теле и базовой аутентификацией.
curl -X POST -d @data.json https://platform.stratpro.hse.ru/pu-username-pa-appname/API_NAME/predict -H "Content-Type: application/json" -u "<username>:<password>"
Общая работа с пайплайнами
Каждый развёрнутый пайплайн содержит OpenAPI спецификацию запросов к себе. Её можно получить следующим запросом:
curl -X GET https://platform.stratpro.hse.ru/pu-username-pa-appname/pipelines/PIPELINE_NAME/version -H "Content-Type: application/json" -u "<username>:<password>"
Основная работа происходит с конкретными пайплайнами. Из общих команд полезны:
# Получить список пайплайнов
curl -X GET https://platform.stratpro.hse.ru/pu-username-pa-appname/pipelines -H "Content-Type: application/json" -u "<username>:<password>"
# Получить список запусков пайплайнов
curl -X GET https://platform.stratpro.hse.ru/pu-username-pa-appname/trials -H "Content-Type: application/json" -u "<username>:<password>"
Отдельный пайплайн
Пайпланы проводят расчёты при получении соответствующих запросов и сохраняют результаты в файлы.
Структура запроса на запуск пайплайна:
curl -X POST -d @data.json https://platform.stratpro.hse.ru/pu-username-pa-appname/pipelines/PIPELINE_NAME/trials -H "Content-Type: application/json" -u "<username>:<password>"
Тело запроса на выполнения расчёта - это объект с полями, похожими на поля запроса к MLComponent.
inputs- список входных данных, где каждый элемент - это словарь. Ключи словаря:name- название, произвольная строка, используется в коде модуля. Например,"image".datatype- тип входных данных, одна из строк"FP32", "FP64", "INT32", "FILE", "str", "dict". Должен соответствовать одному изdatatypes, определённых в API пайплайна.content_type- тип содержимого файла, если тип входной переменнойdatatype- это"FILE". Обычно предполагается MIME-type. Например,application/json,text/csv. Для специализированных данных тип может быть любым -bed,docxи так далее.data- строка с путём к входному файлу или одномерный список входных данных соответствующего типа.shape- размерность входной переменной как массива, применимо даже к файлам.
output_fields- список выходных данных, где каждый элемент - это словарь. Ключи словаря: *data- строка с путём к выходному файлу. Если передаётсяdata, результат будет записан в переданный файл. Иначе - записан во временный файл и возвращён в ответ на запрос.
model_parameters- список пар[name, value], произвольных параметров примитивных типов. Передаются в качестве переменнойparametersв расчётную функцию.
{
"inputs": [
{
"name": "image",
"data": "pipeline_data/input/image1.png",
"datatype": "FILE",
"content_type": "image/png",
"shape": 0
}
],
"output_vars": [
{
"name": "report",
"data": "pipeline_data/output/report/"
}
]
}