Open teezip opened 1 year ago
YAML files have a concept to reference additional files with refs f.ex $ref: 'somecollection.yaml#/collections/somecollection' One approach would be to support YAML configurations and transform those to hakunapi in-memory properties with Jackson jackson-dataformat-yaml. YAML to properties transform might be possible to implement without any changes to current service initialisation - except additional yaml config file detection. This might require some contracts for declarations as arrays in YAML for collections lists and properties as well as parameters lists.
# YAML configuration > transform (expansion) > properties > hakunapi configuration
# https://github.com/FasterXML/jackson-dataformats-text/tree/2.17/properties ?
# fex yaml becomes properties
# api.title=INSPIRE Simple Addresses, Finland
# api.version=0.1
# api.desription=Example....
#
# General information about the api
# Not required, dummy values provided by the service
api:
title: "INSPIRE Simple Addresses, Finland"
version: 0.1
description: >
Example implementation of OGC API Services with hakunapi.
INSPIRE Simple Addresses from Finland. Data from 13.02.2023
https://www.avoindata.fi/data/fi/dataset/rakennusten-osoitetiedot-koko-suomi
by Finnish Digital and Population Data services Agency.
license:
name: "Data accessed from the API is licensed by the Digital and Population Data Services Agency CC BY 4.0 licence."
url: "https://creativecommons.org/licenses/by/4.0/"
# List of servers
## Required, comma-separated list of server the API is
servers:
dev:
## The url of the server has to be correct as it is used for all links generated by the server
url: "http://localhost:8080/features"
description: "Development server"
# API level configuration
formats:
geojson:
# force lon,lat axisOrder on GeoJSON output even if output CRS is lat,lon by authority
# formats.geojson.forceLonLat=true
type: json
html:
type: html
gpkg:
type: gpkg
dir: "/app/features_addresses/tmp"
getfeatures:
limit:
default: 10
max: 10000
# Configure known srids (hakunapi will always add 84 (lon, lat) and 4326 (lat, lon))
srid:
- 3067:
- 4258:
latLon: true
# Let hakunapi know that EPSG:4258 is lat,lon order
# Collections and their configurations
## Required, comma-separated list of all collections
collections:
somecollection:
# ? something like this
$ref: 'somecollection.yaml#/collections/somecollection'
addresses:
title: "Simple Addresses"
description: "Addresses of Finlands Buildings"
## Should properties with null values be omitted from the response
writeNulls: true
## PostgreSQL/PostGIS configuration
### This collection is backed by 'pg' (PostgreSQL/PostGIS) source/driver
type: pg
### Name of {db}.properties
db: db
schema: "public"
table: "simple_addresses"
extent:
### Spatial extent of the collection, required by some clients to recognize the colletion as a spatial feature collection
spatial:
crs84: [15.0537852,58.6074565,33.9935374,70.2641566]
### Supported Coordinate Reference Systems (CRS:84 is always and automatically included)
srid: [3067,4258]
### Required, mapping for primary id property
id:
mapping: id
### Mapping for primary geometry property
geometry:
mapping: geom
### List of all (other) properties
#properties: inspireId_localId,inspireId_namespace,component_ThoroughfareName,component_PostalDescriptor,component_AdminUnitName_1,component_AdminUnitName_4,locator_designator_addressNumber,locator_level,locator_level_href,position_specification,position_specification_href,position_method,position_method_href,position_default,building,parcel
### property is mapped to a static value instead of column reference if mapping is single-quoted
properties:
inspireId_localId:
mapping: id
inspireId_namespace:
mapping: 'https://github.com/INSPIRE-MIF/2017.2/GeoJSON/ads/examples/'
component_ThoroughfareName:
mapping: thoroughfare_name
component_PostalDescriptor:
mapping: postal_descriptor
component_AdminUnitName_1:
mapping: 'Suomi'
component_AdminUnitName_4:
mapping: admin_unit_name_4
locator_designator_addressNumber:
mapping: address_number
locator_level:
mapping: 'siteLevel'
locator_level_href:
mapping: 'https://inspire.ec.europa.eu/codelist/LocatorLevelValue/siteLevel'
position_specification:
mapping: 'building'
position_specification_href:
mapping: 'https://inspire.ec.europa.eu/codelist/GeometrySpecificationValue/building'
position_method:
mapping: 'byOtherParty'
position_method_href:
mapping: 'https://inspire.ec.europa.eu/codelist/GeometryMethodValue/byOtherParty'
position_default:
mapping: 'true'
### If the name of the property matches the name of the backing column no mapping is required
building:
parcel:
## Queryables
parameters:
inspireId_localId:
component_ThoroughfareName:
component_PostalDescriptor:
component_AdminUnitName_4:
locator_designator_addressNumber:
building:
parcel:
In some services Hakunapi feature configuration files are relatively large.
In this enhancements Hakunapi read a folder containing multipe configuration files and merges these when starting a server.