Я с радостью делюсь fluent-discourse — новым пакетом Python для работы с API Discourse.
Уже существуют несколько пакетов для взаимодействия с API Discourse через Python. Так зачем создавать ещё один?
Другие пакеты для работы с Discourse обычно подходят к задаче схожим образом: для каждого эндпоинта API создается отдельная функция Python.
У такого подхода есть несколько недостатков:
- Крайне сложно добиться полного соответствия функционала API. API Discourse частично не имеет документации, и часто приходится реверс-инжинирить эндпоинты. Кроме того, существует множество плагинов, предоставляющих свои эндпоинты API, которые не входят в ядро. Это ставит пользователя библиотеки перед сложным выбором: делать pull request для добавления необходимых ему эндпоинтов в библиотеку или создавать кастомное решение для дополнительных эндпоинтов.
- Вам приходится изучать ещё один API. Помимо изучения методов и эндпоинтов самого API Discourse, нужно разбираться, какой вызов функции в Python им соответствует.
- Требуется тестировать гораздо больше кода, поэтому сложнее добиться 100% покрытия тестами. Следовательно, меньше уверенности в качестве создаваемого программного обеспечения.
В отличие от этого подхода, я использовал «флюентный» интерфейс, где для построения запросов применяется цепочка вызовов методов. Давайте рассмотрим пример.
Чтобы получить последние темы в категории ‘foo’ с id=5, используется следующий эндпоинт:
GET /c/foo/5.json.
Чтобы выполнить этот запрос с помощью данной библиотеки, достаточно вызвать:
client.c.foo[5].json.get()
Как видно, существует семантическое соответствие между эндпоинтом API и соответствующим вызовом в Python.
Такой подход:
- «Из коробки» обеспечивает полное соответствие функционала API Discourse, включая недokumentированные эндпоинты, эндпоинты плагинов и те, которые ещё не определены (перспективность на будущее).
- Вам нужно изучить только API Discourse. Легко перевести любой вызов API таким образом, поэтому не нужно искать соответствующую функцию.
- Вся библиотека состоит примерно из 150 строк кода. Это делает тривиальным достижение 100% покрытия тестами.
Покрытие тестами составляет 100% благодаря небольшому набору интеграционных тестов против живого сервера Discourse.
Если это звучит привлекательно, надеюсь, вы попробуете этот пакет!