Hi all,
sorry for the late reply, FOSS4G EU preparations kept me from following up on this one for a bit.
Observations below.
conformances
My customers really want fine grain control over the conformances; the ability to enable/disable on a case-by-case basis. This is going to be required as different regions have different mandatory requirements as we saw during the work done last year. It is also advantageous to limit the attack surface and only enable what is needed. This also provide an approach for all the optional not quite completed yet standards; they can be disabled by default?
That’s an interesting challenge… we’d have to be able to selectively disable resources, resource methods, and resource query parameters/body elements (some API do use JSON document as POST, e.g. STAC API search endpoint). At the same time, they should behave like they are not implemented, so not denied, but ignored: we cannot go out with an error message because you’re trying to use sortby and it’s been disabled, it should just be ignored as if the server did not implement it.
The above would make for a fair bit of hairy code, if implemented in the service controller directly, and some callbacks controlling how the request parsing is done, otherwise (pluggable and external, but still one class or one method per configurable behavior).
And oh, also plugins to edit the API document in order to remove the classes we do not want to expose.
Another possible take is to split down the module into many smaller parts (e.g., gs-ogcapi-features-sorting), that you just don’t install… but it would not work if you are doing a managed multi-tenant deploy.
user experience
I like the story of configure your layers in geoserver once and they will show up in additional services / protocols as they become available. Kind of the point of GSIP-202.
I’m confused… “configure your layers in geoserver once and they will show up in all compatible services” is what GeoServer has done since day one. GSIP-202 moved the OGC API landing pages in the same place as the capabilities documents for the same type of OWS service, which is very sensible, but unrelated to which services publish which layer (as you said, defaults to all layers, but can now be twaked at a layer level to choose a subset of them).
In https://github.com/geoserver/geoserver/pulls you can see I had some surprises integrating service descriptors in line with GSIP-202. I had fully expected to rename the WFS → Features and have the different protocols (OWS-WFS, OGCAPI-Features) be listed under this common heading. I could see changing the menu heading to “Features” with tabs for each service for example …
… the project is open source, don’t “expect”, just check the code
I am also not sure what to do with things like DIGGS?
DGGS, Discrete Global Grid System. It does not fit with the others. If you add “STAC” it would not fit either, although one
might create a “catalog” entry in the home page, to host both CSW and STAC (both catalogs, but with very different
targets).
Per service collections vs everything collections
This is another fundamental how should it work question. If you look at our services each has been done independently with its own collects list. The other implementations (for example pygeopai) have a single collections list; which has more functionality dumped into it to reflect each ogcapi-service conformance enabled …
The “everything” collections is a much better user experience. List stuff and how to interact with it in one place. However it has its limits; even pygeoapi has ended up with “collection” and “record-collection” now…
Keeping them independent results in a service that is small enough we could test openapi client generation (but perhaps only the two of us share that dream eh?).
It also allows to sustain micro-service efforts like GeoServer cloud. If everything was added at once, we’d have to take some
extra steps to also allow publishing the various services independently. I’m imagining a “api-core” module adding the notion
of “collection” for anything that is data like, and others that add extra bits to complete their functionality: resources, links,
unfortunately also data structures, which is not going to work well in java beans (Document subclasses) that are going to
be encoded in JSON.
In that sense, having a single monolithic implementation makes things easier, one knows in advance which APIs are there,
and what information is needed.
Aside: It looks like some things like ogcapi-records search are designed to be additions to all collections end-points (adding text search for example).
That’s CSW in the API world. You can still search for metadata, althought it adds the ability to search for collectionsn too.
If we could answer this a bit better we could determine if a refactor / merge is needed?
Suggesting a refactor obvisly makes a graduation of the OGC API modules harder, raising the bill for getting that done.
Tech preview
Last year I relaxed Docker restriction to allow for nightly builds and public testing of OGCAPI services. Even putting that example in the user guide for cut and paste ease. I am not sure if it has resulted in any additional feedback/development/funding?
Not that I know of. The feedback I get normally is that OGC APIs are great from people that want “change”, and
cold reactions from the ones that want to get things done, and have them done already with classic OGC services
(why rewrite to get the same functionality, and often, less functionality?).
The obvious answer to me is to deploy them both side by side, and wait for new clients, written from scratch
to use OGC APIs, to become popular and eventually make OWS obsolete.
In many large organizations, that might easily take 10-15 years to complete, but I would not worry about that,
what’s important today is to get that ball rolling.
My other idea is to put up a “tech preview” of GeoServer only with OGCAPI services with a warning that “contains community components that have not been reviewed”. Similar to how Eclipse Foundation includes a warning on downloads that include incubating components…
With only OGC API services… I like the idea, in practical terms that’s hard (these comments are making me wonder how much
you actually grepped through the code). Right now OGC API X is based on the correspoding X-service, building the request object
programmatically and calling the XService Java object (the “engine” for that service).
To go where you want, and limiting attention to Features, we need to:
- Build a new module, gs-features-core, that only have DefaultWebFeatureService and its basic support classes
- Untangle it from the WFS specific EMF objects
- Untangle the output formats so that each gets its separate set of dependencies (since GML are heavily married to EMF and schemas, but GeoJSON is not)
- Make wfs and ogc-api-features depend on what they need, and no more
And then basically rinse and repeat for the other services (for extra fun, consider that today you cannot have WMS without WFS around,
due to GetFeatureInfo depending on GML outputs).
Mind, the above refactors are a good idea in general, not just for OGC API, and while most of it will just be moving classes
around, there is also a part that involves
-
Goal: Get more eyes on the OGCAPI protocols and thus more interest both development and funding …
-
Caution: This may not be worth it give our poor community response to participation. I have been disappointed with the response thus the 2024 roadmap challenges. It may be easier to interest people in new functionality; but we do need to look to sustainability also.
The lack of interest seems … common. The FOSS4G-EU OGC API session was not exactly packed (might have been because
it was the last day, but the same room was full for the closing ceremony). On the other hand, I’ve seen well attended sessions
with software that happens to implement OGC API, but markets itself as a lean project, that also happens to implement OGC APIs
Cheers
Andrea