Categorygithub.com/guillelpnz/TextAnalyzer
module
0.0.0-20201218115136-19cd3cb829e3
Repository: https://github.com/guillelpnz/textanalyzer.git
Documentation: pkg.go.dev

# README

TextAnalyzer

Descripción

El proyecto consiste en una API REST programada en Go que revisa textos de todo tipo, pudiendo encontrar así redundancias en ellos, o hacer estadísticas sobre el uso del lenguaje en diferentes discursos. (Posiblemente acabe resolviendo algunos, ofreciendo sinónimos). El paquete principal del proyecto está aquí.

Justificación técnica del framework elegido

He elegido el framework para microservicios Gin, que se usa de una forma muy parecida a Martini (basado en Sinatra), pero puede llegar a ser hasta 40 veces más rápido.

Otra alternativa era Beego. Como para el uso que le voy a dar me servía cualquiera de estas, pero Gin tiene una muy buena documentación y es muy rápido, lo elegí.

También podría no haber elegido ninguno, y quedarme con el paquete http que ya viene en el PATH de Go al instalarlo, sin embargo, me parece menos legible, al menos si ya has trabajado con microservicios con otros frameworks para otros lenguajes.

Los datos de los distintos benchmarks hechos están en este enlace: link a la página oficial de gin gonic.

Diseño en general del API

He implementado 5 HU en forma de distintas acciones que hacer con los endpoints:

  • introducirTexto (HU8) -> Mediante una petición POST se envían datos como si de un formulario se tratara, añadiendo al vector de la clase handler (textos) un nuevo objeto texto

  • obtenerRedundantes (HU1) -> Se busca uno de los textos del array y se obtienen las palabras repetidas

  • obtenerSinRedundantes (HU5) -> Se busca uno de los textos del array y se obtiene limpiando palabras repetidas

  • obtenerPersonas (HU3) -> Se busca uno de los textos del array y se obtienen las alusiones a personas

  • obtenerEstadisticas (HU7) -> Se busca uno de los textos del array y se obtienen las frecuencias relativas de aparición de las palabras dentro del texto

Cada una de estas HU tiene una ruta diferente dentro de la app. Están en main.go

Se procesan llamando a funciones de mi clase manejadora que está en textos.go. Estas hacen uso de funciones de mi api previamente programadas.

Con respecto a los tests, los ejecuto sin correr el servicio, usando el paquete httptest. Tengo el archivo main_test.go y textos_test.go

Buenas prácticas

No he hecho la configuración distribuida, pero sí que he implementado un log personalizado. Está en el fichero main línea 100:

Cabecera: func Logger() gin.HandlerFunc

Como se puede observar, es un MiddleWare por el tipo devuelto.

También he hecho una clase Handler, que usa las HU que tenía programadas, pero usando las peticiones http propuestas, las rutas y como almacenamiento un vector. Este es el fichero que contiene la clase, así como las funciones que se llaman cuando se hace routing: textos.go

Tests correctos y de acuerdo con las historias de usuario

En mi fichero textos_test.go, hago tests para ver que funciona de manera correcta el array. Los tests de integración se hacen en el fichero main_test.go. Ahí hago peticiones http y compruebo que la salida es la esperada.

Los tests hechos están enlazados mediante commits a las historias de usuario.

Avance del código

Carpeta con los fuentes hasta el momento

Archivo iv.yaml

Fichero iv.yaml

Issues cerrados

Issues cerrados

Issues abiertos

Issues abiertos

# Packages

No description provided by the author
No description provided by the author