Nombre del Servicio: | usersservice |
Responsabilidad: | Ofrecer un CRUD de usuarios a otros servicios. |
Lenguaje de Programación | Java |
Servicios que Consume: | Servicio de Estadísticas (actualizar usuarios creados) y Servicio de Imágenes (procesamiento de avatar del usuario) |
Servicios que Ofrece: | CRUD de usuarios (ver información debajo) |
Bases de datos: | Neo4j |
A continuación se mustran los endpoints ofrecidos por este servicio.
GET: /api/users
- Limit (int): Numero de resultados por consulta (default=10)
- Offset (int): A partir de qué post se devuelve resultado (default=0)
- MinAge (int): Edad mínima de los usuarios a buscar
- MaxAge (int): Edad máxima de los usuarios a buscar
- WantsToLearn (string[]): Lista de idiomas (ISO) que está aprendiendo los usuarios (or)
- Speaks (string[]): Lista de idiomas (ISO) que hablan los usuario (búsqueda OR)
{
"links": {
"self": "",
"first": "",
"prev": "",
"next": "",
"last": ""
},
"hits": 2,
"total": 2,
"users": [
{
"id": 1,
"username": "pedro",
"name": "pedro",
"surname": "suarez",
"learning": [
"es",
"en"
],
"speaks": "",
"birthDate": "1970-01-02T10:17:36.789+00:00",
"avatar": ""
},
{
"id": 3,
"username": "pedro3",
"name": "pedro",
"surname": "suarez",
"learning": [
"es",
"en",
"ru"
],
"speaks": "cat",
"birthDate": "1614416676",
"avatar": ""
}
]
}
200 OK
N/A
GET: /api/users/<id>
{
"id": 1,
"username": "pedro",
"name": "pedro",
"surname": "suarez",
"learning": [
"es",
"en"
],
"speaks": [],
"birthDate": 1233254568,
"avatar": "<url_a_imagen>"
}
404: Not found
POST: /api/users/
{
"username": "pepiiii",
"password": "admin123",
"email": "[email protected]",
"name": "Pepito",
"surname": "Sanchez Perez"
"learning": [“en”, "ru"],
"speaks": "es",
"birthDate": "<long_time_since_epoch>",
"avatar": "imagenCodificadaEnBase64"
}
201 - Created En la cabecera -> link al recurso
{
"name": "Pepito",
"surname": "Sanchez Perez"
"learning": [“en”, "ru"],
"speaks": "es",
"birthDate": "<long_time_since_epoch>",
"avatar": "imagenCodificadaEnBase64"
}
409 - Conflict: Si el email o el username ya existen.
PUT: /api/users/<id>
{
"learning": [“en”, "ru"],
"speaks": "es",
"avatar": "imagenCodificadaEnBase64"
}
200 - Ok (actualización completada) 204 - No Content (no enviaste nada, no hubo nada que actualizar)
404 - Not Found
DELETE: /api/users/<id>
200 - Ok
404 - Not Found
La elección de una base de datos en grafo como Neo4j se debe principalmente a que en una fase inicial del trabajo teníamos pensado ofrecer un sistema de recomendación de usuarios a los que seguir basándonos en la información de un usuario. Una base de datos en grafo encajaba bastante bien con este tipo de sistema. Finalmente, debido al tiempo disponible, no fue posible implementar esta funcionalidad. Sin embargo, en un futuro se podría añadir y encajaría bastante bien con Neo4J.