В течение некоторого времени моим хобби является создание библиотек (общих модулей с методами) для интеграции с API различных социальных сетей. Это VKEnterprise, TelegramEnterprise и ViberEnterprise. Названия говорят сами за себя. Все их я выкладывал на GitHub в качестве отдельных репозиториев, однако со временем пришел к выводу, что такая система в конце концов даст сбой по нескольким причинам:
1. У библиотек очень много пересекающихся методов
Методы, отправляющие http-запросы, формирующие JSON и многие другие необходимы для работы с любым API без исключений. Но, порой, в них необходимо вносить правки, что приводит к необходимости обновлять данные методы в каждой из библиотек - было бы странно предлагать пользователю держать у себя почти одинаковые модули инструментов для каждой библиотеки отдельно. С ростом количества библиотек процесс подобной унификации становится сложнее.
2. Чехарда отдельных релизов
Подход отдельных проектов под каждый API хорош для пользователя, когда ему необходима работа только с чем-то одним. Как только используемых библиотек из линейки становится больше, возникают неудобства с отслеживанием обновлений каждой из них. Особенно остро этот вопрос может встать тогда, когда были внесены серьезные изменения в модули инструментов. Получая эти модули с обновлением, скажем, библиотеки работы с Viber может отвалиться более старая версия библиотеки Telegram, так как она теперь вызывает измененные методы инструментов с другими параметрами или возвращаемыми значениями.
Поэтому было решено сделать единый проект для всех моих библиотек: как прошлых, так и создаваемых в будущем. Однако это не просто скидывание старых файлов в одну кучу. Проект получил много замечательных нововведений, о которых я сейчас расскажу
Что сейчас из себя представляет код ОПИ?
https://github.com/Bayselonarrend/OpenIntegrations
ОПИ на данный момент содержит 4 отдельные библиотеки: 3 старые для работы с Telegram, VK и Viber и одну новую - для работы с Twitter
Как и было ранее, каждая библиотека представлена отдельным модулем. Однако, в отличии от предыдущих проектов, которые распространялись как исходники с двумя общими модулями - основным и модулем инструментов, ОПИ имеет отдельные релизы сразу в трех вариантах: как XML файлы расширения для загрузки через конфигуратор, как EDT проект расширения и как отдельный файл расширения формата cfe (версия 1С 8.3.9 и выше)
Возможность же создать модули в конфигурации и скопировать в них содержимое репозитория руками осталась - ничего, кроме общих модулей, в проекте нет.
Документация
Помимо объединения кода была создана и новая модная общая документация на базе Docusaurus. Найти ее можно по адресу opi.neocities.org. В данной документации собраны как общие положения о действиях, необходимых для начала работы с каждым отдельным API...
...Так и описание каждого конкретного метода, присутствующего в библиотеке: с примерами кода, описанием параметров и скриншотами результатов:
Следуя инструкциям и примерам, разработчик, даже не связывавшийся с подобной работой ранее, сможет легко организовать несложную интеграцию с представленными API
Тестирование и качество кода
Пару слов о контроле качества и тестировании:
Во-первых, объединение библиотек позволило организовать более-менее достоверное тестирование. Никакой особой магии я тут не придумывал: просто есть стенд с кнопками для каждого метода библиотеки. Я на них нажимаю и смотрю, что происходит. Это, конечно, не гарантирует абсолютное отсутствие багов, но хотя бы исключает попадание в релиз методов с нелепыми ошибками.
Во-вторых, разработка ведется в EDT (Ruby 2023.2.4), что позволяет производить синтаксический анализ и следить за соблюдением стандартов. Это может показаться незначительным, но те, кто использует EDT у себя, знают как неприятно ловить замечания из привнесенного кода. Я не использую strcit-type, но хотя бы замечаний в проекте не остается. + есть комментарии-описания экспортируемых методов
В-третьих, у ОПИ есть свой проект SonarQube, что также положительно влияет на качество кода. Посмотреть статус и сам проект можно перейдя по бэйджам на странице репозитория.
Новая библиотека: Twitter API
Не круто было бы выпускать проект совсем без обновок. Новым объектом интеграции на этот раз стал Twitter. Реализованных методов не много: все они относятся к созданию твитов. Дело в том, что бесплатный тариф для Twitter API ничего другого и не позволяет. Но есть важное замечание - под капотом библиотеки выполняются самые муторные действия, необходимые для всех запросов:
- Авторизация OAuth 1.0a User Context для API версии 1
- Авторизация OAuth 2.0 для API версии 2
- Загрузка файлов: как одним запросом, так и чанками
Так что если вы счастливый обладатель подписки PRO за 9999 килобаксов/мес. и вам нужны какие-либо другие методы, то реализовать их по примеру будет проще простого. Плюс, данную библиотеку можно использовать в качестве примера реализации тех же OAuth 1.0 и 2.0 для других сервисов. Подробнее можно узнать в документации
В заключение
Надеюсь, данный проект окажется для вас полезным. Я рассчитываю развивать его, добавляя новые методы и библиотеки. Буду очень рад, если вы поддержите его здесь и на странице репозитория GitHub. В случае нахождения багов, обязательно напишите в Issues. Это как ни что другое поможет сделать ОПИ лучше. Спасибо за внимание!
Репозиторий OPI: https://github.com/Bayselonarrend/OpenIntegrations
Другие статьи про Открытый пакет интеграций на Инфостарт:
Мой GitHub: https://gitub.com/Bayselonarrend Лицензия MIT: https://mit-license.org