Sono felice di condividere fluent-discourse, un nuovo pacchetto Python per l’utilizzo dell’API di Discourse.
Esistono già alcuni pacchetti per interagire con l’API di Discourse tramite Python. Allora perché crearne un altro?
Gli altri pacchetti per Discourse disponibili tendono ad affrontare il problema in modo simile: creare una funzione Python unica per ogni endpoint dell’API.
Questo approccio presenta alcuni svantaggi:
- È molto difficile raggiungere la piena parità di funzionalità con l’API. L’API di Discourse è parzialmente scarsamente documentata e spesso è necessario analizzare al contrario gli endpoint. Inoltre, esistono numerosi plugin che espongono endpoint API che non fanno nemmeno parte del core. Questo pone l’utente della libreria di fronte alla difficile scelta di aprire richieste di pull per aggiungere gli endpoint necessari alla libreria, oppure costruire una soluzione personalizzata per gli endpoint aggiuntivi.
- Devi imparare un’altra API. Oltre a imparare i metodi e gli endpoint dell’API di Discourse, devi capire quale sia la chiamata alla funzione corrispondente in Python.
- C’è molto più codice da testare, quindi è più difficile ottenere una copertura dei test del 100%. Di conseguenza, c’è meno fiducia nella qualità del software prodotto.
In contrasto con questo approccio, ho utilizzato un’interfaccia “fluent”, in cui si usa la concatenazione di metodi per costruire le richieste. Facciamo un esempio.
Per ottenere gli ultimi argomenti in una categoria ‘foo’ con id=5, si utilizza questo endpoint:
GET /c/foo/5.json.
Per eseguire quella richiesta con questa libreria, basta chiamare:
client.c.foo[5].json.get()
Come puoi vedere, c’è una parità semantica tra l’endpoint dell’API e la chiamata corrispondente in Python.
Questo approccio:
- Offre immediatamente la piena parità di funzionalità con l’API di Discourse, inclusi gli endpoint non documentati, gli endpoint provenienti da plugin e gli endpoint che dovranno ancora essere definiti (future-proof).
- Devi imparare solo l’API di Discourse. È facile tradurre qualsiasi chiamata API in questo modo, quindi non hai bisogno di cercare la funzione che corrisponde.
- L’intera libreria è composta da circa 150 righe di codice. Questo rende banale ottenere una copertura dei test del 100%.
Esiste una copertura dei test del 100% con una manciata di test di integrazione eseguiti contro un server Discourse attivo.
Se tutto ciò ti sembra interessante, spero che proverai questo pacchetto!