Skip to content

REST API Developed with Spring Framework and Java 8. Fibonacci sequence API.

Notifications You must be signed in to change notification settings

lgtoledo/fibonacciSpringApi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

REST API fibonacci

Esta es una aplicación de back-end desarrollado en Java 8, con Spring Framework.

La misma consiste principalmente en una API que dado un número natural n, nos retornará el valor para el n-esimo término de la sucesión de fibonacci.

Base de datos

Se utiliza una base de datos relacional para almacenar los valores intermedios calculados, con el fin de mejorar los tiempos de respuesta en futuras llamadas al endpoint.

Para que se logre apreciar el efecto de mejora del tiempo de respuesta durante sucesivas invocaciones, el algoritmo de cálculo se desarrolló con funciones recursivas, lo cual requiere un tiempo que crece de manera exponencial con relación a n cuando necesita calcular el término, es decir, si aún no existe en la base de datos.

Estadísticas

Adicional a lo anterior, con cada solicitud al endpoint de la sucesión de fibonacci, se almacena en una tabla de Métricas el término n solicitado, así como el Timestamp. Eso posibilita obtener datos estadísticos sobre los términos más solicitados, así como realizar gráficas con su distribución temporal.

Testing

Se crean pruebas automatizadas End2End para comprobar las tres capas Controller-Servicios-Datos, lo cual permite comprobar el correcto funcionamiento de la aplicación. En este caso, la base de datos utilizada para las pruebas es una BD en memoria (H2).

Despliegue

Tanto la aplicación como la base de datos MySQL se despliegan en los respectivos servicios de la nube de Azure.

REST API

A continuación se describe la REST API

Obtener el n-esimo término de la sucesión de fibonacci

Request

GET "/fibonacci/{n}"

Ejemplo:

https://fibonacci-lb.azurewebsites.net/fibonacci/6

Response

{
  "n": 6,
  "value": 8
}

Elimina todos los datos de la base de datos

Request

GET "/fibonacci/reset"

Ejemplo:
    https://fibonacci-lb.azurewebsites.net/fibonacci/reset

Response

{
  "message": "Contenido de la Base de datos borrado correctamente"
}

Métricas: Obtener los tres n términos de la sucesión más consultados

Request

GET "/metrics"

Ejemplo:
    https://fibonacci-lb.azurewebsites.net/metrics

Response

[
    {
        "frequency": 5,
        "nTerm": 8
    },
    {
        "frequency": 3,
        "nTerm": 15
    },
    {
        "frequency": 2,
        "nTerm": 9
    }
]

Métricas: Obtener la cantidad de solicitudes del término n

Request

GET "/metrics/term/{n}"

Ejemplo:
    https://fibonacci-lb.azurewebsites.net/metrics/term/8

Response

{
    "Consultas al término n=8": 5,
    "metrics": [
        {
            "id": 32,
            "nTerm": 8,
            "timestamp": "2022-07-13T01:08:17.573"
        },
        {
            "id": 34,
            "nTerm": 8,
            "timestamp": "2022-07-13T01:08:29.332"
        },
        {
            "id": 35,
            "nTerm": 8,
            "timestamp": "2022-07-13T01:08:33.348"
        },
        {
            "id": 36,
            "nTerm": 8,
            "timestamp": "2022-07-13T01:09:27.542"
        },
        {
            "id": 37,
            "nTerm": 8,
            "timestamp": "2022-07-13T01:09:33.438"
        }
    ]
}

Métricas: Obtener la cantidad de solicitudes en la ÚLTIMA HORA del término n

Request

GET "/metrics/term/{n}/lasthour"

Ejemplo:
    https://fibonacci-lb.azurewebsites.net/metrics/term/8/lasthour

Response

{
    "Consultas al término n=8": 5,
    "metrics": [
        {
            "id": 32,
            "nTerm": 8,
            "timestamp": "2022-07-13T01:08:17.573"
        },
        {
            "id": 34,
            "nTerm": 8,
            "timestamp": "2022-07-13T01:08:29.332"
        },
        {
            "id": 35,
            "nTerm": 8,
            "timestamp": "2022-07-13T01:08:33.348"
        },
        {
            "id": 36,
            "nTerm": 8,
            "timestamp": "2022-07-13T01:09:27.542"
        },
        {
            "id": 37,
            "nTerm": 8,
            "timestamp": "2022-07-13T01:09:33.438"
        }
    ]
}

About

REST API Developed with Spring Framework and Java 8. Fibonacci sequence API.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages