Микросервис media

В статье описываются функции, логика работы, конфигурация и методы микросервиса media.

Микросервис media предоставляет функциональность для загрузки или получения медиа файлов.

Доступ к сервису предоставляется по запросу.

Логика работы Copy-icon

В работе микросервиса используется сущность MediaRequest, которая содержит данные о запросе медиа (название стенда; название сервиса; название папки, где хранится медиа; список медиа файлов; флаг о наличии/отсутствии необходимости изменения размера медиа файла и др.).

Аутентификация Copy-icon

При обращении к микросервису через API в запросах необходимо в заголовке Authorization указывать токен: Authorization: Bearer <токен>.

Авторизация Copy-icon

Для работы с микросервисом в BackOffice у пользователя должна быть роль Admin и/или Admin_Media.

Подробнее о ролях можно узнать здесь.

Service context path

/api/media/

Настройки и параметры конфигурации

Параметры конфигурации указываются в Vault.

Vault используется на нашей платформе в качестве хранилища всех конфигураций развертывания. Инструмент может быть выбран другой.

По умолчанию

{
  "env": {
    "JAVA_XMS": "XXm",
    "JAVA_XMX": "YYYm",

    "LOGGING_FORMAT": "формат_логирования",
    "LOGGING_LEVEL": "уровень_логирования",
    "POSTGRES_DATABASE": "media",
    "POSTGRES_MIGRATION_USER": "media_migration",
    "POSTGRES_PORT": "5432",
    "POSTGRES_USER": "media_user",
    "SERVER_PORT": "порт_сервера"
  }
}


Copy-icon
Указываемые на каждом отдельном стенде

// пример взят с тестового стенда


{
  "env": {
    "BUCKET_ENDPOINT": "адрес_бакета",

    "OAUTH_ECOM_CLIENT_ID": "токен_приложения_ECOM_OAuth",
    "OAUTH_ECOM_ISSUER_URI": "url_ECOM_OAuth",
    "OAUTH_ZITADEL_CLIENT_ID": "токен_приложения_Zitadel",
    "OAUTH_ZITADEL_ISSUER_URI": "url_Zitadel",
    "POSTGRES_HOST": "адрес_хоста",
    "POSTGRES_MIGRATION_PASSWORD": "пароль",
    "POSTGRES_PASSWORD": "пароль",
    "PRIVATE_ACCESS_KEY": "ключ_доступа_к_закрытому_баскету",
    "PRIVATE_BUCKET_NAME": "имя_закрытого_баскета",
    "PRIVATE_SECRET_KEY": "секретный_ключ_для_закрытого_баскета",
    "PUBLIC_ACCESS_KEY": "ключ_доступа_к_публичному_баскету",
    "PUBLIC_BUCKET_NAME": "имя_публичного_баскета",
    "PUBLIC_SECRET_KEY": "секретный_ключ_для_публичного_баскета"
  }

}



Copy-icon

Методы микросервиса Copy-icon

  • Создание медиа - POST запрос, /v1/media
Request parameters

standName - название стенда
serviceName - название сервиса
folder - название папки
files - список медиа файлов
fileMap - карта файлов с указанием их названия и медиа-ключа
withResizing - флаг для активации изменения размера изображения
originalFileName - оригинальное название файла
originalFileNameMediaKey - оригинальный медиа-ключ названия медиа файла

Copy-icon
Response sample

{
    "1-pinot-grigio-640x294.jpg": "master/catalog/images/1716034828389-1882559365.jpg"
}

Copy-icon
Response codes
  • 200 - медиа файл создан, возвращен медиа-ключ файла
  • 422 - ошибка, отсутствуют обязательные параметры
  • Публикация медиа файла - PUT запрос, /v1/media
Request body sample

{
    "standName": "master",
    "serviceName": "catalog",
    "folder": "images",
    "fileMap": {
        "1-pinot-grigio-640x294.jpg": "1716034828389-1882559365.jpg"
    },
    "withResizing": "false"
}

Copy-icon
Response sample

{
    "1-pinot-grigio-640x294.jpg": "master/catalog/images/1716034828389-1882559365.jpg"
}

Copy-icon
Response codes
  • 200 - операция успешно выполнена, медиа файл опубликован
  • 404 - ошибка, медиа файл не найден
  • 422 - ошибка, Unprocessable Entity
  • Удаление медиа файла - DELETE запрос, /v1/media/{standName}/{serviceName}/{folder}/{fileName}
Request parameters

standName - path-параметр, обязательный: название стенда
serviceName - path-параметр, обязательный: название сервиса
folder - path-параметр, обязательный: название папки
fileName - path-параметр, обязательный: название файла

Copy-icon
Response sample

Отсутствует. В ответе приходит только код операции, например, 204.

Response codes
  • 204 - медиа файл успешно удален
  • 404 - ошибка, медиа файл не найден
  • Создание медиа по пути - POST запрос, /v1/media/{standName}/{serviceName}/{folder}
Request parameters

standName - path-параметр, обязательный: название стенда
serviceName - path-параметр, обязательный: название сервиса
folder - path-параметр, обязательный: название папки

Copy-icon
Request body sample

file (MultipartFile) - файл для загрузки

Copy-icon
Response sample

mediaKey - сгенерированный медиа-ключ файла

Copy-icon
Response codes
  • 200 - медиа файл создан, возвращен медиа-ключ файла
  • 422 - ошибка, отсутствуют обязательные параметры
  • Публикация медиа (перенос медиа в публичный бакет) - PUT запрос, /v1/media/{standName}/{serviceName}/{folder}/{fileName}
Request parameters

standName - path-параметр, обязательный: название стенда
serviceName - path-параметр, обязательный: название сервиса
folder - path-параметр, обязательный: название папки
fileName - path-параметр, обязательный: название файла
withResizing - флаг для активации изменения размера изображения

Copy-icon
Response sample

В ответе приходит только код операции, например, 200.

Response codes
  • 200 - операция успешно выполнена, медиа файл опубликован
  • 404 - ошибка, медиа файл не найден
  • 422 - ошибка, Unprocessable Entity
  • Изменение размера медиа файла - POST запрос, /v1/media/resize
Request body sample

{
    "standName": "master",
    "serviceName": "catalog",
    "folder": "images",
    "fileMap": {
        "1-pinot-grigio-640x294.jpg": "1716034828389-1882559365.jpg"
    },
    "withResizing": "true"
}

Copy-icon
Response sample

{
    "1-pinot-grigio-640x294.jpg": "master/catalog/images/1716034828389-1882559365.jpg"
}

Copy-icon
Response codes
  • 202 - операция выполнена успешно, возвращен медиа-ключ файла
  • 422 - ошибка, отсутствуют обязазельные данные