API Database Layers
Crear API
Mitjançant l’aplicació DataBaseLayers podem crear una API pública o privada d’una taula de la base de dades que estigui connectada a giscube-admin. L’Endpoint s’autogenera quan creem una DataBaseLayer i hi podem accedir obrint la URL que apareix a l’administrador.
En el cas de la imatge anterior obtindirem el següent link: (…)/layerserver/databaselayers/adreces/data/
Número de resultats
Algunes APIs poden retornar quantitats de resultats molt grans, fent que les peticions siguin molt lentes. Si volem evitar-ho podem “paginar” els resultats. El camp page_size serveix per limitar (o paginar) el número de resultats que retorna l’API. Per obtenir tots el resultats, és a dir, per evitar la paginació, farem page_size=0.
Filtrar resultats (Capes GeoJSON)
En molts casos utilitzarem l’Endpoint d’una DataBaseLayer per crear Capes GeoJSON. Les Capes GeoJSON s’obtenen filtrant els resultats de l’API, a continuació veurem alguns exemples típics d’aquesta pràctica.
L’aplicació giscube-admin és un projecte de Django, tots els filtres els podem trobar a la pàgina de documentació de Django i s’escriuen amb la “gramàtica” de Django.
Les consultes es faran comparant un o més d’un camp, es comencen amb un ?
i s’encadenen –els filtres de diferents camps– amb un &
. Per exemple, (...)/layerserver/databaselayers/geo_covid/data/?page_size=0§or_neteja=true
-
=: Un dels filtres més comuns és filtrar una taula pel valor d’un camp. Per exemple, filtrar una taula per l’id d’una foreign key. Exemple:
field=5
-
icontains: Un altre filtre molt utilitzat és icontains. Es comprova si un camp conté un cadena de text sense tenir en compte majúscules ni minúscules, podem utilitzar contains si volem tenir-ho en compte. Exemple:
field__icontains=word or sentence
-
in: Per filtrar una capa per diferents valors en un mateix camp s’utilitza el sufix in i es separen els diferents valors amb una coma. Exemple:
field__in=value1,value2,value3,...
-
istartswith: Comprova si el camp comença per la cadena de text indicada, igual que en l’anterior, podem utilitzar
istartswith
.field__startswith=Word
-
isnull: Comprova si el camp és
null
.field__isnull=False
retorna només els registres en que el camp field no ésnull
. -
gt/gte: Comprova si el camp és més gran o si és més gran o igual. Exemple:
field__gte=4
Es pot encadenar amb altres filtres, com per exemple els de dates. Per exemple, filtrar tots els registres que formen part de la segona meitat de l’any:field__month__gte=6
-
lt/lte: Comprova si el camp és més petit o si és més petit o igual. Exemple:
field__lte=4
També es pot filtrar per geometria. En aquest cas no s’ha d’especifiar quin camp té la geometria, l’API és qui s’encarrega de detectar-ho.
-
intersects: Comprova si la geometria de l’element intersecta amb el polígon passat com a paràmetre. El polígon s’escriu com una llista de coordenades separades per comes:
intersects=x0,y0,x1,y1,x2,y2,x3,y3,...
-
in_bbox: Comprova si hi ha solapament entre la geometria de l’element i el bbox que s’ha passat com a paràmetre. El bbox s’escriu amb 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))