我很高兴与大家分享 fluent-discourse,这是一个用于调用 Discourse API 的新 Python 包。
目前已有 几个包 可以通过 Python 调用 Discourse API。那么,为什么还要再开发一个呢?
现有的其他 Discourse 包通常采用类似的方法——为 API 的每个端点创建一个独立的 Python 函数。
这种方法有几个缺点:
- 很难实现与 API 的完整功能对等。Discourse 的 API 文档相对不足,通常需要逆向工程来理解端点。此外,还有许多插件暴露了不属于核心功能的 API 端点。这让库用户面临艰难的选择:要么提交拉取请求,将所需端点添加到库中;要么为额外的端点构建自定义解决方案。
- 你需要学习另一套 API。除了学习 Discourse API 的方法和端点外,你还得弄清楚在 Python 中对应的函数调用是什么。
- 需要测试的代码量更大,因此很难实现 100% 的测试覆盖率。这使得人们对所生成软件的质量缺乏信心。
与此方法相反,我采用了一种“流式”(fluent)接口,通过方法链式调用来构建请求。举个例子:
要获取 ID 为 5 的类别 ‘foo’ 中的最新主题,需使用以下端点:
GET /c/foo/5.json。
使用此库发出该请求只需调用:
client.c.foo[5].json.get()
你可以看到,API 端点与 Python 中的对应调用之间存在语义对等。
这种方法的优势在于:
- 开箱即用即可实现与 Discourse API 的完整功能对等,包括未文档化的端点、插件提供的端点以及尚未定义的端点(面向未来)。
- 你只需学习 Discourse API。任何 API 调用都可以如此轻松地进行转换,因此无需搜索匹配的函数。
- 整个库仅约 150 行代码。这使得实现 100% 的测试覆盖率变得轻而易举。
该库拥有 100% 的测试覆盖率,并包含少量针对真实 Discourse 服务器的集成测试。
如果你对此感兴趣,希望你能试用这个包!