3.6. OGC API Features
OGC API Features (OAPIF) is de eerste implementatie van de nieuwe generatie protocollen van OGC. Het wordt beschreven in het document OGC API - Features - Part 1: Core.
De API kan op normale installaties worden bereikt via http://localhost/qgisserver/wfs3
Hier is een snel informeel overzicht van de meest belangrijke verschillen tussen het welbekende protocol WFS en OAPIF:
OAPIF is gebaseerd op een REST API
OAPIF moet de specificaties volgen van OPENAPI
OAPIF ondersteunt meerdere indelingen voor uitvoer, maar legt er geen verplicht op (alleen GeoJSON en HTML zijn momenteel beschikbaar in QGIS OAPIF) en het gebruikt content negotiation om te bepalen welke indeling aan de cliënt moet worden geserveerd
JSON en HTML zijn eerste klas burgers in OAPIF
OAPIF is zelf-gedocumenteerd (via het eindpunt
/api
)OAPIF is volledig te navigeren (via links) en door te bladeren
Belangrijk
Hoewel de implementatie van OGC API Features in QGIS gebruik kan maken van de parameter MAP
om het projectbestand te specificeren, zijn geen extra parameters voor query toegestaan door de specificatie van OPENAPI. Om deze reden wordt sterk aanbevolen dat MAP
niet wordt weergegeven in de URL en dat het projectbestand in de omgeving op een andere wijze wordt gespecificeerd (d.i. instellen van QGIS_PROJECT_FILE
in de omgeving met een regel rewrite voor een webserver).
Notitie
Het eindpunt API verschaft uitgebreide documentatie voor alle ondersteunde parameters en indelingen voor de uitvoer van uw service. De volgende alinea’s zullen alleen de meest belangrijke beschrijven.
3.6.1. Weergavebronnen
De implementatie van OGC API Features in QGIS Server ondersteunt momenteel de volgende weergavebronnen (uitvoer) indelingen:
HTML
JSON
De indeling die feitelijk wordt geserveerd is afhankelijk van de onderhandeling van de inhoud, maar een specifieke indeling mag expliciet worden verzocht door een specificatie voor de indeling toe te voegen aan de eindpunten.
Ondersteunde extensies voor specificatie van de indeling zijn:
.json
.html
Aanvullende aliassen voor specificaties van indelingen mogen worden gedefinieerd voor specifieke eindpunten:
.openapi
: alias voor.json
ondersteund door het eindpunt API.geojson
: alias voor.json
ondersteund door de eindpunten Features en Feature
3.6.2. Eindpunten
De API verschaft een lijst met eindpunten die de cliënten kunnen ophalen. Het systeem is op een dusdanige manier ontworpen dat elk antwoord een set links verschaft om te navigeren door alle verschafte bronnen.
Punten voor eindpunten, verschaft door de QGIS implementatie zijn:
Naam |
Pad |
Omschrijving |
---|---|---|
Startpagina |
|
Algemene informatie over de service en verschaft links naar alle beschikbare eindpunten |
Conformance |
|
Informatie over de conformiteit van de service aan de standaarden |
API |
|
Volledige beschrijving van de eindpunten, verschaft door de service en de teruggegeven documentstructuur |
Collecties |
|
Lijst van alle collecties (d.i. ‘vectorlagen’) verschaft door de service |
Collectie |
|
Informatie over een collectie (naam, metadata, bereik etc.) |
Functionaliteit |
|
Lijst met objecten, verschaft door de collectie |
Object |
|
Informatie over één enkel object |
Soortgelijk aan WFS-T (transactionele Web Feature Service), is het mogelijk om objecten toe te voegen, bij te werken en te verwijderen (CRUD). De respectievelijke verzoeken worden beschreven in “/api
”.
Startpagina
Het belangrijkste eindpunt is de Startpagina. Vanaf die pagina is het mogelijk om naar alle beschikbare eindpunten van de service te navigeren. De Startpagina moet links verschaffen naar
de definitie van de API (pad
/api
linkrelatiesservice-desc
enservice-doc
),de declaratie voor Conformance (pad
/conformance
, linkrelatieconformance
), ende Collecties (pad
/collections
, linkrelatiedata
).
API Definitie
De API Definitie is een OPENAPI-compliant beschrijving van de API die wordt verschaft door de service. In zijn weergave HTML is het een door te bladeren pagina waar alle eindpunten en hun indelingen voor antwoorden nauwgezet zijn vermeld en gedocumenteerd. Het pad van dit eindpunt is /api
.
De API definitie verschaft een uitgebreide en betrouwbare documentatie van de service, inclusief alle ondersteunde parameters en teruggegeven indelingen.
Notitie
Dit eindpunt is analoog aan WFS’s GetCapabilities
Lijst Collecties
Het eindpunt Collecties verschaft een lijst met alle beschikbare collecties in de service. Omdat de service één enkel project van QGIS “dient” zijn de collecties de vectorlagen uit het huidige project (indien ze werden gepubliceerd als WFS in de projecteigenschappen). Het pad van dit eindpunt is /collections/
.
Detail collectie
Hoewel het eindpunt Collecties geen gedetailleerde informatie verschaft over elke beschikbare collectie, is die informatie beschikbaar in de eindpunten /collections/{collectionId}
. Typische informatie omvat het bereik, een beschrijving, CRSen en andere metadata.
De weergave HTML verschaft ook een door te bladeren kaart met de beschikbare objecten.
Lijst met objecten
Dit eindpunt verschaft een lijst van alle objecten in een collectie, waarvan de ID voor de collectie bekend is. Het pad van dit eindpunt is /collections/{collectionId}/items
.
De weergave HTML verschaft ook een door te bladeren kaart met de beschikbare objecten.
Notitie
Dit eindpunt is analoog aan GetFeature
in WFS 1 en WFS 2.
Detail object
Dit eindpunt verschaft alle beschikbare informatie over één enkel object, inclusief de attributen van het object en zijn geometrie. Het pad van dit eindpunt is /collections/{collectionId}/items/{itemId}
.
De weergave HTML verschaft ook een door te bladeren kaart met de geometrie van het object.
3.6.3. Paginering
Paginering van een lange lijst met objecten is geïmplementeerd in de OGC API door middel van links next
en prev
, QGIS server construeert deze links door het toevoegen van limit
en offset
als parameters voor de tekenreeks van de query.
Voorbeeld URL:
http://localhost/qgisserver/wfs3/collection_one/items.json?offset=10&limit=10
Notitie
De maximale te accepteren waarde voor limit
kan worden geconfigureerd met de instelling voor de configuratie van de server QGIS_SERVER_API_WFS3_MAX_LIMIT
(zie: Omgevingsvariabelen).
3.6.4. Objecten filteren
De beschikbare objecten in een collectie kunnen worden gefilterd/doorzocht door één of meer filters te specificeren.
Filter Datum en tijd
Collecties met attributen date en/of datetime kunnen worden gefilterd door een argument datetime
te specificeren in de tekenreeks voor de query. Standaard wordt het eerste veld date/datetime gebruikt voor filteren. Dit gedrag kan worden geconfigureerd door het instellen van een dimensie “Date” of “Time” in het gedeelte van het dialoogvenster Laageigenschappen.
De syntaxis voor filteren van datum en tijd is volledig beschreven in de API Definitie en ondersteunt ook bereiken (begin- en eindwaarden inbegrepen) in aanvulling op enkele waarden.
Voorbeelden URL:
Geeft alleen de objecten terug met de dimensie date die overeenkomt met 2019-01-01
http://localhost/qgisserver/wfs3/collection_one/items.json?datetime=2019-01-01
Geeft alleen de objecten terug met de dimensie datetime die overeenkomt met 2019-01-01T01:01:01
http://localhost/qgisserver/wfs3/collection_one/items.json?datetime=2019-01-01T01:01:01
Geeft alleen de objecten terug met de dimensie datetime in het bereik 2019-01-01T01:01:01
- 2019-01-01T12:00:00
http://localhost/qgisserver/wfs3/collection_one/items.json?datetime=2019-01-01T01:01:01/2019-01-01T12:00:00
Filter Begrenzingsvak
Een ruimtelijk filter voor een begrenzingsvak kan worden gespecificeerd met de parameter bbox
:
De volgorde van de door komma’s gescheiden elementen is:
Linkerbenedenhoek, WGS 84 longitude
Linkerbenedenhoek, WGS 84 latitude
Rechterbovenhoek, WGS 84 longitude
Rechterbovenhoek, WGS 84 latitude
Notitie
De specificaties van OGC staan ook een specificatie voor een 6-items begrenzingsvak toe, waarbij de derde en zesde items de componenten Z zijn, dit wordt nog niet ondersteund door QGIS server.
Voorbeeld URL:
http://localhost/qgisserver/wfs3/collection_one/items.json?bbox=-180,-90,180,90
Als het CRS van het begrenzingsvak niet WGS 84 is, kan een ander CRS worden gespecificeerd met de optionele parameter bbox-crs
. De identificatie voor de indeling van het CRS moet zijn in de indeling OGC URI:
Voorbeeld URL:
http://localhost/qgisserver/wfs3/collection_one/items.json?bbox=913191,5606014,913234,5606029&bbox-crs=http://www.opengis.net/def/crs/EPSG/9.6.2/3857
Filters voor attributen
Filters voor attributen kunnen worden gecombineerd met het filter voor het begrenzingsvak en zij mogen in de algemene vorm: <attribute name>=<attribute value>
zijn. Meerdere filters mogen worden gecombineerd met de operator AND
.
Voorbeeld URL:
filtert alle objecten waarvan het attribuut name
gelijk is aan “my value”
http://localhost/qgisserver/wfs3/collection_one/items.json?attribute_one=my%20value
Gedeeltelijke overeenkomsten worden ook ondersteund door een operator *
(“ster”):
Voorbeeld URL:
filtert alle objecten waarvan het attribuut name
eindigt op “value”
http://localhost/qgisserver/wfs3/collection_one/items.json?attribute_one=*value
3.6.5. Sorteren van objecten
Het is mogelijk de volgorde van de set met resultaten te sorteren op veldwaarde met de parameter voor de query sortby
.
De resultaten worden standaard in oplopende volgorde gesorteerd. Een Booleaanse vlag (sortdesc
) kan worden ingesteld om de resultaten in aflopende volgorde te sorteren:
http://localhost/qgisserver/wfs3/collection_one/items.json?sortby=name&sortdesc=1
3.6.6. Selecteren van attributen
De attributen van een object, die worden teruggegeven door een aanroep Lijst met objecten, kunnen worden beperkt door een kommagescheiden lijst met namen van attributen toe te voegen in het optionele argument properties
van de tekenreeks voor de query.
Voorbeeld URL:
geeft alleen het attribuut name
terug
http://localhost/qgisserver/wfs3/collection_one/items.json?properties=name
3.6.7. De HTML-pagina’s aanpassen
De weergave HTML gebruikt een set sjablonen voor HTML om het antwoord te maken. De sjabloon wordt geparset door een sjabloonprogramma, genaamd inja. De sjablonen kunnen worden aangepast door ze te overschrijven (zie: Overschrijven van sjabloon). Het sjabloon heeft toegang tot dezelfde gegevens, als die welke beschikbaar zijn voor de weergave JSON
, en een aantal aanvullende functies zijn voor het sjabloon beschikbaar:
Aangepaste functies voor sjabloon
path_append( path )
: voegt een pad naar een map toe aan de huidige URLpath_chomp( n )
: verwijdert het gespecificeerde aantal “n” mapcomponenten uit het huidige pad voor de URLjson_dump( )
: drukt de gegevens voor JSON af die zijn doorgegeven aan de sjabloonstatic( path )
: geeft de volledige URL terug naar het gespecificeerde statische pad. Bijvoorbeeld: “static( “/style/black.css” )” met een bronpad “http://localhost/qgisserver/wfs3” zal teruggeven “http://localhost/qgisserver/wfs3/static/style/black.css”.links_filter( links, key, value )
: Geeft gefilterde links terug uit een lijst met linkscontent_type_name( content_type )
: Geeft een verkorte naam terug uit een type inhoud, bijvoorbeeld “text/html” zal “HTML” teruggevennl2br( text )
: Geeft de tekst voor de invoer terug waarin alle newlines zijn vervangen door tags “<br>”starts_with( string, prefix )
: geeft TRUE terug als een tekenreeks begint met het opgegeven voorvoegsel voor de tekenreeks, anders FALSE
Overschrijven van sjabloon
Sjablonen en statische gegevens worden opgeslagen in submappen van de standaardmap voor de API-bron van de QGIS server (/usr/share/qgis/resources/server/api/
op een systeem van Linux), de basismap kan worden aangepast door de omgevingsvariabele QGIS_SERVER_API_RESOURCES_DIRECTORY
te wijzigen.
Een typische installatie voor Linux zal de volgende boom voor de mappen hebben:
/usr/share/qgis/resources/server/api/
└── ogc
├── schema.json
├── static
│ ├── jsonFormatter.min.css
│ ├── jsonFormatter.min.js
│ └── style.css
└── templates
└── wfs3
├── describeCollection.html
├── describeCollections.html
├── footer.html
├── getApiDescription.html
├── getFeature.html
├── getFeatures.html
├── getLandingPage.html
├── getRequirementClasses.html
├── header.html
├── leaflet_map.html
└── links.html
U kunt, om de sjablonen te overschrijven. de gehele boom kopiëren naar een andere locatie en QGIS_SERVER_API_RESOURCES_DIRECTORY
laten verwijzen naar de nieuwe locatie.