Desarrollado por el TEAM CAPUDO para la materia *7531 - Teoría del Lenguaje de la Facultad de Ingeniería de la UBA.
Utilizando los Datasets del proyecto de Buenos Aires Data construimos una REST API en Go para consultas de las siguientes 3 entidades del año 2021:
Implementamos los parsers utilizando los utilitarios nativos del lenguaje, e implementamos el servidor Web utilizando el framework Gin.
Todo el código relativo al proyecto se encuentra en el directorio ./proyecto
Para correrlo de forma local solo es necesario correr
# Desde el root del respositorio
make run
# O bien, ingresando a la carpeta ./proyecto
go run main.go
Se implementaron un set de tests para los parsers a modo de explorar los utilitarios que ofrece el lenguaje. Para correr los tests es necesario ejecutar:
# Desde el root del repositorio
make test
# O bien, ingresando a la carpeta ./proyecto
go test ./...
- ./proyecto/api: Paquete de API que inicializa el WEB framework y define la rutas y los filtros.
- ./proyecto/config: Paquete de configuración que permite agregar configuracion desde variables de entorno.
- ./proyecto/model: Paquete de coleccion de las estructuras de los Modelos de los tipos de datos de los JSON y CSV parseados.
- ./proyecto/datasets: Locación de los datasets utilizados.
- ./proyecto/database: Realiza el parsing propiamente dicho de las fuentes de datos en CSV o JSON, y los expone para consumo interno como colección de tipos de datos.
- ./proyecto/logger: Utilitario para logs del sistema.
- ./proyecto/utils: Coleccion de utilitarios para el proyecto en general.
Devuelve la lista total de bicicleteros de la Ciudad de Buenos Aires. Permite filtrar por query:
Parametro | Descripción | Ejemplo |
---|---|---|
anclajes_t |
Filtrado de bicicleterospor cantidad total y exacta de anclajes | GET /api/bicicleteros?anclajes_t=30 |
anclajes_max |
Filtrado por cantidad máxima de anclajes | GET /api/bicicleteros?anclajes_max=30 |
anclajes_min |
Filtrado por cantidad mínima de anclajes | GET /api/bicicleteros?anclajes_min=30 |
Los parámetros de consulta pueden combinarse.
Devuelve la información de un bicicletero por :id
.
Ejemplo:
{
"id": 2,
"nombre_referencia": "2BAEcobici",
"nombre_estacion": "002 - Retiro I",
"ubicacion": "Ramos Mejia, Jose Maria, Dr. Av. & Del Libertador Av.",
"tipo": "AUTOMÁTICA",
"horario": "Estación automática: disponibilidad las 24 horas",
"anclajes_t": 20,
"latitud": -34.592422,
"longitud": -58.37471
}
Devuelve la lista total de recorridos de la Ciudad de Buenos Aires. Permite filtrar por query:
Parametro | Descripción | Ejemplo |
---|---|---|
id_estacion_origen |
Filtrado por estación de origen del recorrido | GET /api/recorridos?id_estacion_origen=123BAEcobici |
id_estacion_destino |
Filtrado por estación de destino del recorrido | GET /api/recorridos?id_estacion_destino=123BAEcobici |
fecha_desde |
Filtrado por fecha en que se inicio el recorrido | GET /api/recorridos?fecha_desde=2021-02-20 |
fecha_hasta |
Filtrado por fecha en la que se finalizo el recorrido | GET /api/recorridos?fecha_hasta=2020-02-20 |
id_usuario |
Filtrado por usuario que ha realizado el recorrido | GET /api/recorridos?id_usuario=375284BAEcobici |
Los parámetros de consulta pueden combinarse.
Devuelve la información de un recorrido por :id
.
Ejemplo:
{
"id": "7737009BAEcobici",
"duracion_recorrido": 1658,
"fecha_origen_recorrido": "2020-05-18T13:06:42Z",
"id_estacion_origen": "33BAEcobici",
"nombre_estacion_origen": "033 - Facultad de Medicina",
"direccion_estacion_origen": "Pres. José Evaristo Uriburu 987",
"longitud_estacion_origen": -58.39898,
"latitud_estacion_origen": -34.59709,
"fecha_destino_recorrido": "2020-05-18T13:34:20Z",
"id_estacion_destino": "175BAEcobici",
"nombre_estacion_destino": "147 - Constitución",
"direccion_estacion_destino": "Avenida Juan de Garay 1050",
"longitud_estacion_destino": -58.380707,
"latitud_estacion_destino": -34.62685,
"id_usuario": "211329BAEcobici",
"modelo_bicicleta": "ICONIC"
}
Devuelve la lista total de recorridos de la Ciudad de Buenos Aires. Permite filtrar por query:
Parametro | Descripción | Ejemplo |
---|---|---|
genero |
Filtrado por genero del usuario (F|M|OTRO ) |
GET /api/usuarios?genero=M |
edad |
Filtrado por edad exacta del usuario | GET /api/usuarios?edad=37 |
edad_desde |
Filtrado por edad minima del usuario | GET /api/usuarios?edad_desde=37 |
edad_hasta |
Filtrado por edad maxima del usuario | GET /api/usuarios?edad_hasta=37 |
fecha_alta_desde |
Filtrado por fecha de alta minima | GET /api/usuarios?fecha_alta_desde=2020-01-01 |
fecha_alta_hasta |
Filtrado por fecha de alta máxima | GET /api/usuarios?fecha_alta_hasta=2020-01-01 |
Los parámetros de consulta pueden combinarse.
Devuelve la información de un usuario por :id
.
Ejemplo:
{
"id": 605638,
"genero": "OTRO", // F | M | OTRO
"edad": 27,
"fecha_alta": "2020-09-29T13:03:00Z"
}
Devuelve un objeto de estadísticas calculadas sobre la base de datos completa de usuarios.
Ejemplo:
{
"edad_maxima": 73,
"edad_minima": 16,
"edad_promedio": 32,
"por_genero": {
"hombre": {
"edad_maxima": 73,
"edad_minima": 17,
"edad_promedio": 32
},
"mujer": {
"edad_maxima": 71,
"edad_minima": 16,
"edad_promedio": 33
},
"otro": {
"edad_maxima": 63,
"edad_minima": 18,
"edad_promedio": 31
}
}
}
Identico al endpoint GET /api/usuarios/stats
pero realiza los cálculos de forma sincrónica, en lugar de utilizar goroutines
como lo hace el anterior.
El proyecto fue publicado en dyno
gratuito de Heroku en la siguiente URL para poder experimentar y realizar pruebas de forma pública.
:info: Todos los endpoints mencionados arriba están disponibles