Repositorio simple de datos, accesible por API REST
Disponer de un almacén de datos espaciales (o no), accesibles vía HTTP para poder explotarlos desde cualquier cliente. Para conseguir el objetivo se implementa una API de acceso a la información almacenada en MongoDB. La solución planteada está pensada para proyectos relativamente pequeños, y con necesidades de consulta/edición de capas. Por el momento no se contempla la posibilidad de realizar consultas o análisis espaciales, para ello siempre es mejor usar sistemas de gestión de bases de datos espaciales y Sistemas de Información Geográfica.
- Java 8
- SpringBoot
- MongoDB
El acceso a la API require autenticación, así mismo el acceso a ciertas operaciones requiere autorización. Para esta primera versión la autorización se basa en roles. A partir de la versin 0.1.0 el acceso a los recursos puede ser establecido a nivel de usuario.
Existen 3 roles:
- USER: Usuarios con permiso para consultar la información almacenada
- DATA_MANAGER: Usuarios con permiso para consultar, añadir y modificar información
- STORE_ADMIN: Usuarios con permiso para consultar, añadir y modificar información y usuarios. Por defecto se crea un usuario con este rol (login: sds-Admin, contraseña: default-pw). Es recomendable crear otro usuario con este rol o al menos cambiar la contraseña.
El acceso a la API (salvo algunos recursos de acceso libre) requiere de un proceso de login. Se usa JSON WEB TOKEN para el proceso de autenticación. Para lo cual es necesario enviar la información de usuario en el body de una petición POST a http://deploy-url/login
{"login":"sds-Admin","password": "default-pw"}
Una vez logado se obtendrá un token en la cabecera Authorization para usarlo en el resto de peticiones HTTTP.
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJzZHMtQWRtaW4iLCJleHAiOjE1MTQxOTg4Mzl9.Fxn4Mg3BMzK5ZoHXL8Hpfbc02gEZy2N7xtOo3zn6iq_YRI3xtgDAphBmFusxmvffz3PYuDh_rkW-oCnVIQKkHQ
Para construir el software podemos usar maven de la siguiente forma:
mvn clean package
Se generará un jar en el directorio target, el cual podemos ejecutar directamente con el siguiente comando
java -jar target/simple-data-store-0.0.1-SNAPSHOT.jar
Puedes ver mas opciones en la documentación de SpringBoot
El software incluye documentación de la api con swagger. Para poder consultarla puedes acceder a la url http://deploy-url:8080/swagger-ui.html
Para esta versión se debe tener una instancia de MongoDB. El software usa los parámetros por defecto (test, puerto,...). Para cambiar esos parámetros modificar el fichero application.properties
Se almacenarán datos de tipo Layer cuya especificación se corresponde con el siguiente json:
{
"data": "string: datos a almacenar",
"description": "string: descripción de los datos",
"format": "GEOJSON | GEOJSON_CSS | WKT | GML | KML | TOPO_JSON | CUSTOM_TEXT",
"id": "string: identificador autoasignado (debe indicarse para actualizar o consultar)",
"lastUpdate": "última fecha de modificacion: por ejemplo 2017-12-15T11:20:38.987Z",
"name": "string: nombre de la capa (no puede quedar vacío",
"openData": true,
"projection": "string: proyección correspondiente a los datos"
}
Solo pido por favor que se sigua el patrón: KISS Pensad que lo va a revisar @i62lotor y a veces es un poco "tikis-mikis".
- Código fuente: podeis enviar vuestras PR, y encantado las incorporo, si al menos siguen un mínimo de limpieza de código, y algún test unitario.
- Testing: me parecen fundamentales. Si quieres hacer pruebas de rendimiento, estabilidad, carga, etc. ¡Genial!
- Documentación: intentaré ir completando la wiki. ¿Quieres ayudarme?
Bajo la premisa de mantener el sistema simple, se aceptan sugerencias de todo tipo. En principio tengo en mente incluir:
Granularidad en el control de acceso a los recursos (capas) a nivel de usuario.Implementado en versin 0.1.0.- Implementar test de integración.
- Realizar test de estabilidad y carga.
- Generar documentación de uso y api.
- Generar una versión con MongoDB embebido.