Je suis ravi de vous présenter fluent-discourse, un nouveau package Python pour consommer l’API Discourse.
Il existe déjà quelques packages pour interagir avec l’API Discourse via Python. Alors, pourquoi en créer un autre ?
Les autres packages Discourse disponibles tendent à aborder le problème de manière similaire : créer une fonction Python unique pour chaque point de terminaison (endpoint) de l’API.
Cette approche présente plusieurs inconvénients :
- Il est très difficile d’obtenir une parité fonctionnelle complète avec l’API. L’API de Discourse est partiellement sous-documentée et nécessite souvent une ingénierie inverse des points de terminaison. De plus, de nombreux plugins exposent des points de terminaison API qui ne font même pas partie du cœur du système. Cela place l’utilisateur de la bibliothèque devant un choix difficile : faire des demandes de tirage (pull requests) pour ajouter les points de terminaison dont il a besoin à la bibliothèque, ou construire une solution personnalisée pour les points de terminaison supplémentaires.
- Vous devez apprendre une autre API. En plus d’apprendre les méthodes et les points de terminaison de l’API Discourse, vous devez déterminer quel est l’appel de fonction correspondant en Python.
- Il y a beaucoup plus de code à tester, ce qui rend plus difficile d’obtenir une couverture de tests de 100 %. Ainsi, la confiance dans la qualité du logiciel produit est moindre.
Contrairement à cette approche, j’ai utilisé une interface « fluide » (fluent), où vous utilisez la chaînage de méthodes pour construire des requêtes. Prenons un exemple.
Pour obtenir les derniers sujets d’une catégorie ‘foo’ avec l’id=5, vous utilisez ce point de terminaison :
GET /c/foo/5.json.
Pour effectuer cette requête avec cette bibliothèque, appelez simplement :
client.c.foo[5].json.get()
Vous pouvez constater qu’il existe une parité sémantique entre le point de terminaison de l’API et l’appel correspondant en Python.
Cette approche :
- Offre dès le départ une parité fonctionnelle complète avec l’API Discourse, y compris les points de terminaison non documentés, ceux provenant de plugins, et ceux qui n’ont pas encore été définis (préparation pour l’avenir).
- Vous n’avez qu’à apprendre l’API Discourse. Il est facile de traduire n’importe quel appel API de cette manière, et donc vous n’avez pas besoin de rechercher la fonction qui lui correspond.
- L’ensemble de la bibliothèque compte environ 150 lignes de code. Cela rend trivial d’atteindre une couverture de tests de 100 %.
Il y a une couverture de tests de 100 % avec une poignée de tests d’intégration contre un serveur Discourse en direct.
Si cela vous semble attrayant, j’espère que vous essayerez ce package !