Salta el contingut

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.

Screenshot

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&sector_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 és null.

  • 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))