documentation/pages/api-module.md

123 lines
5.4 KiB
Markdown
Raw Normal View History

2025-03-04 14:15:57 +00:00
# Взаимодействие с модулем через API
Доступ к модулю по API контролируется с помощью компонентов APIComponent. Есть несколько типов таких компонентов, каждый из которых отвечает за свой набор функционала.
2025-03-10 12:12:33 +00:00
- [Файловый API](#файловый-api)
- [ML-компонент](#ml-компонент)
- [Общая работа с пайплайнами](#общая-работа-с-пайплайнами)
2025-03-04 14:15:57 +00:00
- Отдельный пайплайн
Все API запросы работают по ссылкам вида `https://platform.stratpro.hse.ru/app-name/<api>`.
Здесь `app-name` - название приложение, оно же указано в пункте `namespace` во всех компонентах приложения.
## Файловый API
### Работа с файловым API
URL запросов к файловому API имеют вид `https://platform.stratpro.hse.ru/app-name/files/box-name/<path>`.
Здесь `box-name` - это имя компонента DataBox, к которому обращается запрос.
Файловый API позволяет загружать файлы в файловое хранилище и получать уже загруженные файлы. Загрузка папок со всем содержимым не предусмотрена, в таких случаях предполагается автоматизация запросов на загрузку отдельных файлов.
#### Пример загрузки и скачивания файла через сервис `files`.
Для загрузки файла можно использовать следующий запрос `PUT`:
```sh
2025-03-10 12:12:33 +00:00
curl -X PUT https://platform.stratpro.hse.ru/app-name/files/box-name/my_dir/my_file.txt -H "Content-Type: application/json" -u "developer:<password>"
2025-03-04 14:15:57 +00:00
```
Это запрос:
1. К приложению `app-name`.
2. К файловому API (у которого endpoint всегда `files`).
3. К ящику `box-name`.
4. К пути `my_dir/my_file.txt` внутри ящика.
5. От имени пользователя модуля `developer`, пароль которого - `<password>`.
Даже если запрос верный, сам файл на данном этапе не создаётся. Вместо этого должен прийти ответ в формате JSON:
```json
{
"name": "app-name/files/box-name/my_dir/my_file.txt",
"presigned_put_url": "<Длинная pre-signed ссылка загрузки>"
}
```
С помощью pre-signed ссылки можно уже загрузить сам файл следующим запросом:
```sh
curl -X PUT -T local/path/to/my_file.txt "<Длинная pre-signed ссылка загрузки>"
```
Здесь `local/path/to/my_file.txt` - локальный путь к файлу.
2025-03-10 12:12:33 +00:00
## ML-компонент
ML-компоненты проводят расчёты при получении соответствующих запросов и присылают результат в ответе на запрос.
Каждый развёрнутый ML-компонент содержит OpenAPI спецификацию запросов к себе. Её можно получить следующим запросом:
```
curl -X GET https://platform.stratpro.hse.ru/app-name/API_NAME/modelversion -H "Content-Type: application/json" -u "<username>:<password>"
```
Тело запроса на выполнения расчёта - это объект с полями, которые в точности копируют поля из функции inference в [MLComponent](mlcmp.md#функция-inference).
### Пример запроса
Пример тела запроса к 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/app-name/API_NAME/predict -H "Content-Type: application/json" -u "<username>:<password>"
```
## Общая работа с пайплайнами
Каждый развёрнутый пайплайн содержит OpenAPI спецификацию запросов к себе. Её можно получить следующим запросом:
```
curl -X GET https://platform.stratpro.hse.ru/app-name/pipelines/PIPELINE_NAME/version -H "Content-Type: application/json" -u "<username>:<password>"
```
Основная работа происходит с конкретными пайплайнами. Из общих команд полезны:
```
# Получить список пайплайнов
curl -X GET https://platform.stratpro.hse.ru/app-name/pipelines -H "Content-Type: application/json" -u "<username>:<password>"
```
```
# Получить список запусков пайплайнов
curl -X GET https://platform.stratpro.hse.ru/app-name/trials -H "Content-Type: application/json" -u "<username>:<password>"
```