OGC API käytännössä: ldproxy ja pygeoapi
Open Geospatial Consortiumin (OGC) aktiivisesti kehitteillä oleva OGC API-rajapintastandardi tähtää nykyisten OGC-web-palvelujen, kuten WMS ja WFS, nykyaikaistamiseen. Gispo avasi uuden OAPIn sisältöä syksyllä 2019 julkaistussa artikkelissa OGC-API: Rajapintapalvelujen tulevaisuus paikkatietoalalla. Kerroimme tuolloin OAPIn innostuneesta vastaanotosta ja ennustimme ensimmäisten rajapintatoteutuksien rantautuvan Suomeen lähitulevaisuudessa.
Me Gispolla pääsimme ensimmäistä kertaa kokeilemaan uutta OAPIa käytännössä joulukuussa 2019 uuden OGC Features API-koepalvelun muodossa. Saimme arvokasta kokemusta mm. uuden rajapintastandardin käyttöönotosta sekä nykyisten WFS-palvelujen migraatiosta uuteen Features APIin. Tutustuimme jo tällä hetkellä käytössä oleviin teknologioihin, ja esittelemme seuraavassa niistä kaksi vaihtoehtoa.
ldproxy
Interactive Instrumentsin kehittämä ldproxy lupaa parempaa käytettävyyttä WFS-palveluille. ldproxy on käytännössä adapteri, joka muuntaa olemassaolevan WFS-palvelun OGC Features API-rajapinnaksi. Julkaistavat WFS-palvelut määritetään web-käyttöliittymän kautta yksinkertaisesti antamalla palvelun URL-osoite. ldproxy hakee annetun WFS-rajapinnan GetCapabilities-dokumentin ja osaa sen perusteella automaattisesti määrittää skeeman WFS-palvelussa julkaistuille aineistolle ja julkaista ne OGC Features API-rajapinnan kautta. Hyödynnettävän WFS-palvelun tulee tukea WFS-versiota 2.0 sekä WFS-vastauksien jakamista sivuihin eli Paging-ominaisuutta. Palveluja voidaan lisätä WFS:n lisäksi myös CSW-katalogeista. Uusien aineistojen julkaisu OGC API-rajapintaan onkin ldproxyn avulla todella helppoa.
ldproxyn käyttöönotto kannattaa tehdä Dockerin avulla. Dockerin asentamisen jälkeen ldproxyn saa käynnistettyä komennolla
docker run --name ldproxy -d -p 7080:7080 -v ldproxy_data:/ldproxy/data iide/ldproxy:latest
Web-käyttöliittymä on tämän jälkeen käytettävissä selaimen kautta osoitteessa http://localhost:7080/manager. Palvelun lisääminen on helppoa: lisää uusi palvelu painamalla plus-painiketta, anna palvelulle nimi ja WFS-osoite ja klikkaa lisää. ldproxy konfiguroi palvelun automaattisesti. Kun palvelun tila on Initializing-tilan sijaan Online, on rajapintapalvelu valmiina käytettäväksi. Valitse lisäämäsi palvelu ja klikkaa View avataksesi vastajulkaistun OAPI-rajapinnan selaimella.
Suojattujen palveluiden jakaminen ldproxyllä onnistuu JSON web tokenien avulla, jos hyödynnettävä WFS-palvelu tukee niitä. Kannattaa huomioida, että ldproxyn web-käyttöliittymä on avoin kaikille, eikä sisäänrakennettua tukea käyttäjienhallinnalle ole. Tuotantokäytössä luvaton pääsy web-käyttöliittymään tulee estää esimerkiksi erillisen web-palvelimen kuten Apache tai nginx avulla.
pygeoapi
Toinen vaihtoehto oman OGC Features API-rajapinnan julkaisuun on Python-pohjainen pygeoapi. Sen konfigurointi on ldproxyä haastavampaa, mutta tarjoaa myös enemmän mahdollisuuksia. pygeoapi tukee useita eri tietolähteitä, mikä mahdollistaa esimerkiksi jo olemassa olevien WFS-rajapintojen, PostGIS-tietokantojen sekä Geopackage tai shape-tiedostojen sisältämien aineistojen julkaisun OAPI-rajapinnan kautta. pygeoapi-demopalvelussa on valmiiksi määritetty ja julkaistu esimerkkiaineistoja. Demopalvelun avulla voikin nopeasti testata, miltä uusi OAPI-rajapinta saattaa näyttää ja miten sitä käytetään!
Asennusohjeet opastavat asennukseen Python-virtuaaliympäristössä, mutta helpoin tapa kokeilla pygeoapia on Dockerin kanssa. Ennen Docker-kontin käynnistämistä tulee luoda konfiguraatiotiedosto, jota pygeoapi käyttää julkaistavan rajapinnan määrittelyyn. Konfiguraatiotiedostossa määritetään mm. rajapinnassa julkaistavat aineistot ja niiden metatiedot. Esimerkkikonfiguraation voi kopioida projektin GitHub-repositoriosta. pygeoapin voi käynnistää avaamalla komentorivi hakemistoon joka sisältää konfiguraatiotiedoston my.config.yml ja käynnistämällä pygeoapi komennolla
docker run --name geoapi -p 5000:80 -v $(pwd)/my.config.yml:/pygeoapi/local.config.yml -it geopython/pygeoapi
Rajapinta on käytettävissä osoitteessa http://localhost:5000. Toisin kuin ldproxy, pygeoapilla ei ole hallintaan käytettävää web-käyttöliittymää, vaan konfiguraatiomuutokset tehdään manuaalisesti muokkaamalla konfiguraatiotiedostoa. Muutokset tulevat voimaan Docker-kontin uudelleenkäynnistyksen jälkeen. WFS-rajapintoja julkaistessa WFS-rajapinnan tulee tukea versiota 2.0, ja myös tuki paging-ominaisuudelle on suositeltua. pygeoapin kehitys on aktiivista, ja käytössä olevat konfiguraatioparametrit saattavat muuttua versioiden välillä.