API Database Layers
Crear API
Mediante la aplicación DataBaseLayers podemos crear una API pública o privada de una tabla de la base de datos que esté conectada a giscube-admin. El Endpoint se autogenera cuando creamos una DataBaseLayer y podemos acceder a él abriendo la URL que aparece en el administrador.
En el caso de la imagen anterior, obtendremos el siguiente enlace: (…)/layerserver/databaselayers/adreces/data/
Número de resultados
Algunas APIs pueden retornar cantidades de resultados muy grandes, haciendo que las peticiones sean muy lentas. Si queremos evitarlo, podemos “paginar” los resultados. El campo page_size sirve para limitar (o paginar) el número de resultados que retorna la API. Para obtener todos los resultados, es decir, para evitar la paginación, haremos page_size=0.
Filtrar resultados (Capas GeoJSON)
En muchos casos utilizaremos el Endpoint de una DataBaseLayer para crear Capas GeoJSON. Las Capas GeoJSON se obtienen filtrando los resultados de la API, a continuación veremos algunos ejemplos típicos de esta práctica.
La aplicación giscube-admin es un proyecto de Django, todos los filtros los podemos encontrar en la página de documentación de Django y se escriben con la “gramática” de Django.
Las consultas se harán comparando uno o más campos, se empiezan con un ?
y se encadenan (los filtros de diferentes campos) con un &
. Por ejemplo, (...)/layerserver/databaselayers/geo_covid/data/?page_size=0§or_neteja=true
-
=: Uno de los filtros más comunes es filtrar una tabla por el valor de un campo. Por ejemplo, filtrar una tabla por el ID de una foreign key. Ejemplo:
field=5
-
icontains: Otro filtro muy utilizado es icontains. Se comprueba si un campo contiene una cadena de texto sin tener en cuenta mayúsculas ni minúsculas, podemos utilizar contains si queremos tenerlo en cuenta. Ejemplo:
field__icontains=word or sentence
-
in: To filter a layer by different values of the same field, the suffix in is used, and the different values are separated by a comma. Ejemplo:
field__in=value1,value2,value3,...
-
istartswith: Comprueba si el campo comienza con la cadena de texto indicada, igual que en el anterior, podemos utilizar
istartswith
.field__startswith=Word
-
isnull: Comprueba si el campo es
null
.field__isnull=False
retorna solo los registros en que el campo field no esnull
. -
gt/gte: Comprueba si el campo es mayor o si es mayor o igual. Ejemplo:
field__gte=4
Se puede encadenar con otros filtros, como por ejemplo los de fechas. Por ejemplo, filtrar todos los registros que forman parte de la segunda mitad del año:field__month__gte=6
-
lt/lte: Comprueba si el campo es menor o si es menor o igual. Ejemplo:
field__lte=4
También se pueden filtrar por geometría. En este caso no hay que especifiar qué campo tiene la geometría, la API es quien se encarga de detectarlo.
-
intersects: Comprueba si la geometría del elemento intersecta con el polígono pasado como parámetro. El polígono se escribe como una lista de coordenadas separadas por comas:
intersects=x0,y0,x1,y1,x2,y2,x3,y3,...
-
in_bbox: Comprueba si hay solapamiento entre la geometría del elemento y el bbox que se ha pasado como parámetro. El bbox se escribe en WKT:
in_bbox=SRID=4326; POLYGON ((x_min y_min, x_min y_max, x_max y_max, x_max y_min, x_min y_min))
También se puede filtrar por geometría. En este caso no se tiene que especificar qué campo tiene la geometría, la API es quien se encarga de detectarlo
-
intersects: Comprueba si la geometría del elemento interseca con el polígono pasado como parámetro. El polígono se escribe como una lista de coordenadas separadas por comas:
intersects=x0,y0,x1,y1,x2,y2,x3,y3,...
-
in_bbox: Comprueba sie hay solapamiento entre la geometría del elemento y el bbox que se ha pasado como parámetro. El bbox se escribe con WKT:
in_bbox=SRID=4326; POLYGON ((x_min y_min, x_min y_max, x_max y_max, x_max y_min, x_min y_min))