Me complace compartir fluent-discourse, un nuevo paquete de Python para consumir la API de Discourse.
Ya existen varios paquetes para consumir la API de Discourse mediante Python. ¿Entonces, por qué crear otro?
Los otros paquetes de Discourse disponibles suelen abordar el problema de manera similar: crear una función única de Python para cada extremo (endpoint) de la API.
Este enfoque tiene algunas desventajas:
- Es muy difícil lograr una paridad de características completa con la API. La API de Discourse está algo subdocumentada y a menudo es necesario realizar ingeniería inversa en los extremos. Además, existen numerosos plugins que exponen extremos de API que ni siquiera forman parte del núcleo. Esto presenta al usuario de la biblioteca la difícil opción de enviar solicitudes de extracción (pull requests) para agregar los extremos que necesita a la biblioteca, o construir una solución personalizada para los extremos adicionales.
- Tienes que aprender otra API. Además de aprender los métodos y extremos de la API de Discourse, debes averiguar cuál es la llamada de función correspondiente en Python.
- Hay mucho más código para probar, por lo que es más difícil lograr una cobertura de pruebas del 100 %. Por lo tanto, hay menos confianza en la calidad del software producido.
En contraste con este enfoque, utilicé una interfaz “fluent” (fluida), donde se usa la encadenación de métodos para construir solicitudes. Veamos un ejemplo.
Para obtener los temas más recientes en una categoría ‘foo’ con id=5, se utiliza este extremo:
GET /c/foo/5.json.
Para realizar esa solicitud con esta biblioteca, simplemente llama a:
client.c.foo[5].json.get()
Puedes ver que hay una paridad semántica entre el extremo de la API y la llamada correspondiente en Python.
Este enfoque:
- Ofrece de inmediato una paridad de características completa con la API de Discourse, incluyendo extremos no documentados, extremos de plugins y extremos que aún no se han definido (a prueba de futuro).
- Solo tienes que aprender la API de Discourse. Es fácil traducir cualquier llamada a la API de esta manera, por lo que no necesitas buscar la función que le corresponde.
- Toda la biblioteca tiene aproximadamente 150 líneas de código. Esto hace que sea trivial lograr una cobertura de pruebas del 100 %.
Hay una cobertura de pruebas del 100 % con un puñado de pruebas de integración contra un servidor de Discourse en vivo.
Si esto te resulta atractivo, ¡espero que pruebes este paquete!