[MapServer-dev] Handling additional parameters in OGC Features API URLs
Seth G
sethg at geographika.co.uk
Tue Sep 30 06:47:46 PDT 2025
Thanks for the feedback Jukka.
If I understand correctly, we are using OpenAPI, and so we are free to use any additional parameters?
There is an open PR from Tom which adds this to the API definition: https://github.com/MapServer/MapServer/pull/7295
--
web:https://geographika.net & https://mapserverstudio.net
mastodon: @geographika at mastodon.social
On Tue, Sep 30, 2025, at 1:23 PM, Rahkonen Jukka wrote:
> Hi Seth,
>
> The OGC API Features standard has also some considerations about vendor
> parameters
> https://docs.ogc.org/is/17-069r4/17-069r4.html#query_parameters. I do
> not know how to interpret the standard in this context but I believe
> that it limits how much we can fiddle with the request URLs. I
> recommend reading the whole paragraph but here is an excerpt:
>
> 7.6. Unknown or invalid query parameters
> Requirement 8
> /req/core/query-param-unknown
>
> A
> The server SHALL respond with a response with the status code 400, if
> the request URI includes a query parameter that is not specified in the
> API definition.
> If a server wants to support vendor specific parameters, these have to
> be explicitly declared in the API definition.
> If OpenAPI is used to represent the API definition, a capability exists
> to allow additional parameters without explicitly declaring them. That
> is, parameters that have not been explicitly specified in the API
> definition for the operation will be ignored.
> OpenAPI schema for additional "free-form" query parameters
> in: query
> name: vendorSpecificParameters
> schema:
> type: object
> additionalProperties: true
> style: form
>
> -Jukka Rahkonen-
>
> ________________________________________
> Lähettäjä: MapServer-dev käyttäjän Seth G via MapServer-dev puolesta
> Lähetetty: Tiistai 30. syyskuuta 2025 12.31
> Vastaanottaja: MapServer Devs
> Aihe: [MapServer-dev] Handling additional parameters in OGC Features API URLs
>
>
> Hi devs,
>
> We've been discussing at the OSGeo codesprint how to handle extra
> parameters when working with the OGC Features API. The issue is that
> additional parameters, such as a security token, are not persisted to
> the URLs constructed by MapServer. For example, a user might request:
>
> https://demo.mapserver.org/cgi-bin/mapserv/localdemo/ogcapi/collections/?f=json&token=98127319283
>
> However, MapServer will return a JSON response with URLs like:
>
> "links": [
> {"href":
> "https://demo.mapserver.org/cgi-bin/mapserv/localdemo/ogcapi/collections/ocean?f=json"}
> ]
>
> Client applications can append extra parameters with every request, but
> this is not always possible, for example when using ArcGIS Pro or QGIS.
>
> MapServer already supports adding parameters for WxS services using
> Runtime Substitution, since all WEB METADATA values can accept
> parameters. For example, the ows_onlineresource returned in a
> GetCapabilities response can include URLs with tokens:
>
> "ows_onlineresource"
> "http://my.host.com/cgi-bin/mapserv?map=/path/to/your-mapfile.map&%25TOKEN%25"
>
> OGC Features URLs, however, are constructed in code by building paths
> and then appending querystring parameters, so runtime substitution
> cannot be used here. While HTML templates can be modified to include
> additional parameters, this does not affect URLs returned in f=json
> responses and updating all templates is time-consuming:
>
> {"href", api_root + "/collections/" + std::string(id_encoded) + "?f=json"}
>
> A proposed solution is to add a new METADATA item to allow extra
> parameters to be appended to these URLs:
>
> "ows_extraparams" "token=%TOKEN%&userid=%USER_ID%"
>
> - This would use the same Runtime Substitution approach as other
> METADATA items.
> - Mapfile authors would be responsible for adding VALIDATION blocks for
> the parameters.
> - All URL construction in mapogcapi.cpp would be updated to append
> extra_parameters to the end of URLs, handling edge cases such as ending
> ampersands or empty strings:
> {"href", api_root + "/collections/" + std::string(id_encoded) +
> "?f=json" + extra_parameters}
>
> As with other METADATA items, LAYER-level metadata would take
> precedence over WEB-level metadata. This would allow collection-level
> parameters to be supported when required.
>
> Thoughts / comments welcome,
>
> Seth
>
> --
> web:https://geographika.net/ & https://mapserverstudio.net/
> mastodon: @geographika at mastodon.social
> _______________________________________________
> MapServer-dev mailing list
> MapServer-dev at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/mapserver-dev
More information about the MapServer-dev
mailing list