Библиотека для работы с S3: AWS, MinIO и прочим (open-source)

25.11.24

Интеграция - WEB-интеграция

Новые методы в составе Открытого пакета интеграций для работы с S3. С их помощью вы сможете легко и быстро организовать управление вашим объектным хранилищем: работать с бакетами, загружать, изменять и удалять объекты, а также многое другое. Бесплатно и с открытым исходным кодом!

Если вы не слышали ранее об Открытом Пакете Интеграций (что вполне вероятно), то небольшая вводная часть ниже, под катом. Для тех, кто уже знаком с ОПИ, данный раздел можно пропустить.

 
 Что такое Открытый Пакет Интеграций

 

Открытый Пакет Интеграций (ОПИ) - это open-source набор методов для простой и быстрой интеграции с различными популярными API. Он состоит из аналогичных по функционалу 1С-расширения (CFE), OS-пакета и программы для Windows и Linux, которые предоставляют готовые функции для работы с целым набором различных онлайн-сервисов.


  • ОПИ бесплатен и имеет открытый исходный код на GitHub. Вы всегда можете получить последнюю версию библиотеки на странице репозитория, а подписавшись - узнавать о выходе обновлений. Все релизы сопровождаются статьями на Инфостарт и разделами единой документации. На Инфостарт вы можете подписаться уже хоть сейчас, а про документацию я расскажу далее.

 

 

 

  • Удобная единая документация. Она расположена на сайте opi.neocities.org и содержит в себе всю информацию, необходимую для работы: инструкции по предварительным действиям для начала интеграции, описания всех методов с параметрами и возвращаемыми значениями, примеры кода и т.д. Каждый API имеет там свой раздел.

 

 

 

 

  • Простая установка. ОПИ распространяется во множестве вариантах: как XML файлы расширения, как EDT проект расширения, как файл расширения формата .cfe (версия 1С 8.3.9), как файл пакета для OneScript и еще в целом наборе пакетов и файлов для Windows и Linux. Из этого набора вы всегда сможете выбрать тот способ установки, который лучше подойдет для вашей конкретной задачи

 

На момент последнего обновления данной статьи, доступны следующие API:

Наиболее актуальную информацию можно посмотреть в репозитории или на вводной странице документации.


S3 - популярный стандарт хранения информации в облаке, который является основой различных программных решений для хостинга объектных хранилищ

 

 

Кроме непосредственно Amazon S3, который используется у нас не так часто, встретить данный формат можно еще и в различных self-hosted вариантах - например, Minio или Garage. Так или иначе, любая реализация S3, помимо правил хранения, имеет поддержку (полную или не полную) и его API, что нас сегодня и интересует

 

В этом обновлении реализованы следующие функции для работы через S3 API:

  • Универсальные методы
    • Получение структуры данных для авторизации
    • Отправка произвольного запроса без тела
    • Отправка произвольного запроса с телом
  • Методы работы с бакетами
    • Создание бакета
    • Удаление бакета
    • Проверка доступности бакета
    • Получение списка бакетов
    • Установка, получение и удаление настроек шифрования бакета
    • Установка, получение и удаление тегов бакета
    • Установка и получение настроек версионирования объектов в бакете
  • Методы работы с объектами
    • Загрузка объекта в хранилище (одним запросом или по частям)
    • Получение объекта из хранилища (одним запросом или по частям)
    • Получение информации об объекте
    • Удаление объекта
    • Копирование объекта
    • Установка, получение и удаление тегов объекта
    • Получение списка версий объектов в бакете

 

Как и для остальных API, данные функции подробно описаны в документации и, помимо 1С, доступны также в виде версий для OneScript и  как CLI приложение. Но есть также и несколько особенностей конкретно данной библиотеки, которые стоит рассмотреть отдельно



Формат ответов

Сам по себе API S3 присылает ответы на запросы либо в теле формата XML, либо в заголовках. На мой взгляд, это не особенно удобно, поэтому все ответы, возвращаемые при вызове функций библиотеки, были приведены к следующему единому виду:

 

{
    "status": 200,
    "response": {},
    "headers": {}
}

 

Для удобства тут показан JSON, но в 1С и OS это будет структура. У нее есть три поля, а именно:

  • status - код ответа Http
  • response - тело ответа от S3, преобразованное из XML в структуру
  • headers - соответствие заголовков из ответа

Это призвано упростить работу с библиотекой, исключая необходимость парсить XML самостоятельно

Пример ответа - копирование объекта (сериализованный в JSON):

 

{
 "status": 200,
 "response": {
  "CopyObjectResult": {
   "LastModified": "2024-11-22T09:35:15.646Z",
   "ETag": "\"9e0176f87f6565a22f78e0f9b39a4d78\""
  }
 },
 "headers": {
  "Accept-Ranges": "bytes",
  "Content-Length": "232",
  "Content-Type": "application/xml",
  "Date": "Fri, 22 Nov 2024 09:35:15 GMT",
  "Etag": "\"9e0176f87f6565a22f78e0f9b39a4d78\"",
  "Server": "MinIO",
  "Strict-Transport-Security": "max-age=31536000; includeSubDomains",
  "Vary": "Origin,Accept-Encoding",
  "X-Amz-Id-2": "057275ee0636b36a8256f409a6ff665de46bfaa1f0d5faf2d1b4f312e55c34fa",
  "X-Amz-Request-Id": "180A40AC5592D201",
  "X-Content-Type-Options": "nosniff",
  "X-Xss-Protection": "1; mode=block"
 }
}

 

Загрузка и скачивание объектов частями

API S3 поддерживает загрузку и скачивание объектов как одним запросом, так и несколькими, разбивая данные файла на части. В библиотеке ОПИ, а именно в функциях ПолучитьОбъект() и ЗагрузитьОбъект() использование разбиения запросов регламентируется полем ChunkSize в основных данных - в нем указывается размер в байтах, при превышении которого загрузка будет производиться по частям. Если это поле не указано, то используется размер по умолчанию - 20 MB

 

Сейчас это может быть немного непонятно, но об этом подробнее написано в документации

 

Напоследок же стоит отметить еще один важный нюанс по работе с S3: в зависимости от того, какой реализацией данного стандарта вы пользуетесь, доступность тех или иных функций, а также их параметров, может быть ограничена. Сегодняшнее обновление разрабатывалось с использованием хранилища на MinIO и лучше всего подойдет именно для него

 

Ну а пока все! Скачать Открытый пакет интеграций можно по ссылкам ниже

Спасибо за внимание!

 

Также не забывайте ставить звездочку этому и другим проектам, если они вам понравилась! Проектам это помогает в развитии, а вам - в отслеживании новостей о выходе новых версий


 

Репозиторий ОПИ: github.com/Bayselonarrend/OpenIntegrations

Последний релиз: github.com/Bayselonarrend/OpenIntegrations/releases/latest

 
 Где? Куда?

 

Другие статьи про Открытый пакет интеграций на Инфостарт:

 

 

 Мой GitHub:    https://gitub.com/Bayselonarrend 
 OpenYellow:    https://openyellow.org
 Лицензия MIT:  https://mit-license.org

S3 http интеграция обмен хранилище web объектное хранилище aws minio

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    17878    19    22    

17

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20002    13    17    

17

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14485    42    8    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1486    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. leemuar 21 25.11.24 10:19 Сейчас в теме
Спасибо, здорово!

У вас тоже работа с запросами идет только на сервере. Есть ли планы сделать запросы доступными на клиенте и что сейчас мешает этому?
2. bayselonarrend 2128 25.11.24 10:35 Сейчас в теме
(1)
Есть ли планы сделать запросы доступными на клиенте и что сейчас мешает этому?


Сходу не скажу, мешает ли что-то, просто на мой взгляд работа на сервере это более часто необходимый случай. Делать клиентский вариант не было мысли
3. user1950534 25.11.24 16:35 Сейчас в теме
Пока разбирался с весьма мудрёным и непонятным GitHub, EDT и прочими блокчейнами, психанул и за пару дней слабал свой интегратор с S3. Особенно ничего сложного нет, ну немного замудреное API у Джозефа, с подписями этими всякими. Прикольно, что используется один и тот же API EndPoint для большинства запросов, но например загрузка файла от закачки отличается GET/PUT (соответственно) вызовами по одному и тому же EndPoint-у. Мда, загнивают капиталисты, раз даже архитектуру API сделали по-дешмански))

Вы как решали вопрос с именами файлов? Там кажется 128 unicod-овских букав пролезает.... Какой в итоге выбрали подход?
4. bayselonarrend 2128 25.11.24 16:39 Сейчас в теме
(3)
Вы как решали вопрос с именами файлов? Там кажется 128 unicod-овских букав пролезает....


Не очень понял, про какие имена файлов идет речь
5. user1950534 25.11.24 16:49 Сейчас в теме
(4)
(4) тогда понятно, вопрос снят)))
6. bayselonarrend 2128 25.11.24 17:15 Сейчас в теме
7. Жолтокнижниг 259 25.11.24 22:45 Сейчас в теме
Не пользовался, но по подходу к продукту очень круто. Качество кода, документация, оформления релизов вообще выше всяких похвал.

Видно что проект вложена душа. Респект автору.
KirillZ44; Foma4382; +2 Ответить
8. bayselonarrend 2128 25.11.24 22:51 Сейчас в теме
Оставьте свое сообщение