Tenho o prazer de compartilhar fluent-discourse, um novo pacote Python para consumir a API do Discourse.
Já existem alguns pacotes para consumir a API do Discourse via Python. Então, por que criar outro?
Os outros pacotes do Discourse disponíveis tendem a abordar o problema de forma semelhante: criar uma função Python exclusiva para cada endpoint da API.
Essa abordagem tem algumas desvantagens:
- É muito difícil alcançar paridade total de recursos com a API. A API do Discourse é parcialmente subdocumentada e, muitas vezes, é necessário fazer engenharia reversa dos endpoints. Além disso, existem inúmeros plugins que expõem endpoints de API que nem fazem parte do núcleo. Isso coloca o usuário da biblioteca diante da difícil escolha de abrir pull requests para adicionar os endpoints necessários à biblioteca ou criar uma solução personalizada para os endpoints extras.
- Você precisa aprender outra API. Além de aprender os métodos e endpoints da API do Discourse, você precisa descobrir qual é a chamada de função correspondente em Python.
- Há muito mais código para testar, tornando mais difícil obter 100% de cobertura de testes. Assim, há menos confiança na qualidade do software produzido.
Em contraste com essa abordagem, utilizei uma interface “fluent”, onde você usa encadeamento de métodos para construir solicitações. Vamos dar um exemplo.
Para obter os tópicos mais recentes em uma categoria ‘foo’ com id=5, use este endpoint:
GET /c/foo/5.json.
Para fazer essa solicitação com esta biblioteca, basta chamar:
client.c.foo[5].json.get()
Você pode ver que há paridade semântica entre o endpoint da API e a chamada correspondente em Python.
Essa abordagem:
- Oferece, prontamente, paridade total de recursos com a API do Discourse, incluindo endpoints não documentados, endpoints de plugins e endpoints que ainda serão definidos (à prova de futuro).
- Você só precisa aprender a API do Discourse. É fácil traduzir qualquer chamada de API dessa forma, e, portanto, você não precisa procurar a função correspondente.
- Toda a biblioteca tem cerca de 150 linhas de código. Isso torna trivial alcançar 100% de cobertura de testes.
Há 100% de cobertura de testes com um punhado de testes de integração contra um servidor Discourse ao vivo.
Se isso lhe parecer atraente, espero que você experimente este pacote!