Ich freue mich, fluent-discourse vorstellen zu können, ein neues Python-Paket zum Abrufen der Discourse-API.
Es gibt bereits einige Pakete, die die Discourse-API über Python nutzen. Warum also ein weiteres entwickeln?
Die anderen verfügbaren Discourse-Pakete gehen das Problem meist ähnlich an: Für jeden Endpunkt der API wird eine eigene Python-Funktion erstellt.
Dieser Ansatz hat einige Nachteile:
- Es ist sehr schwierig, eine vollständige Funktionsäquivalenz zur API zu erreichen. Die Discourse-API ist teilweise unzureichend dokumentiert, und oft müssen Endpunkte durch Reverse Engineering erschlossen werden. Darüber hinaus gibt es zahlreiche Plugins, die API-Endpunkte bereitstellen, die nicht einmal zum Kern gehören. Das stellt den Nutzer der Bibliothek vor die schwierige Wahl, Pull Requests einzureichen, um benötigte Endpunkte zur Bibliothek hinzuzufügen, oder eine eigene Lösung für zusätzliche Endpunkte zu entwickeln.
- Man muss eine weitere API erlernen. Zusätzlich zum Erlernen der Methoden und Endpunkte der Discourse-API muss man herausfinden, welcher Funktionsaufruf in Python entspricht.
- Es gibt viel mehr Code zu testen, sodass eine 100-prozentige Testabdeckung schwerer zu erreichen ist. Das führt zu weniger Vertrauen in die Qualität der produzierten Software.
Im Gegensatz zu diesem Ansatz habe ich eine „fluent“-Schnittstelle verwendet, bei der man durch Methodenkettung Anfragen konstruiert. Nehmen wir ein Beispiel:
Um die neuesten Themen in einer Kategorie „foo“ mit der ID 5 zu erhalten, verwendet man diesen Endpunkt:
GET /c/foo/5.json.
Um diese Anfrage mit dieser Bibliothek durchzuführen, ruft man einfach auf:
client.c.foo[5].json.get()
Man erkennt, dass eine semantische Äquivalenz zwischen dem API-Endpunkt und dem entsprechenden Aufruf in Python besteht.
Dieser Ansatz
- bietet ab Werk eine vollständige Funktionsäquivalenz zur Discourse-API, einschließlich nicht dokumentierter Endpunkte, Endpunkte aus Plugins und Endpunkte, die noch nicht definiert sind (zukünftssicher).
- erfordert, dass man nur die Discourse-API erlernt. Es ist einfach, jeden API-Aufruf so zu übersetzen, sodass man nicht nach der passenden Funktion suchen muss.
- besteht aus nur etwa 150 Zeilen Code. Das macht es trivial, eine 100-prozentige Testabdeckung zu erreichen.
Es gibt eine 100-prozentige Testabdeckung mit einer Handvoll Integrationstests gegen einen live laufenden Discourse-Server.
Wenn das für dich klingt, hoffe ich, dass du dieses Paket ausprobierst!