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