Open-EO / openeo-api

The openEO API specification
http://api.openeo.org
Apache License 2.0
93 stars 12 forks source link

How to expose which version of openeo-processes is available/targeted #517

Open soxofaan opened 1 year ago

soxofaan commented 1 year ago

I'm working on adding openeo API 1.2 and processes 2.0 to the VITO backend and the current goal is:

It would help (e.g. for user support) if we could make the linking between these versions more explicit in the metadata in some way.

Is there a way to expose the (target) openeo-processes version explicitly, e.g. globally in capabiltiies doc, or per process?

m-mohr commented 1 year ago

Hmm... Globally doesn't make a lot of sense as we often have the case that we implement processes from different versions, e.g. when new processes get added (e.g. you are on 1.x and add just one or two new processes from 2.x). Has happened in the past. On the other hand, processes are meant to be self-declaring and unversioned. Like if you encounter a process from 1.1.0 that reports that version but is has been changed by the user (e.g. removed/added a parameter or updated a schema), is it still 1.1.0 or what version is it?

So I would try to avoid adding version numbers for processes. What's the use case? Wouldn't the client just read the process and detect that it's 1.2 or 2.0 e.g. based on the raster-cube / data cube subtype etc? It think that's the way to go and was always intended that way. This doesn't prevent you from adding a custom property "version" or so to the processes though.

soxofaan commented 1 year ago

Yes indeed, in practice the bag of provided processes is a bit a mix of 1.0, 1.1, 1.2, 2.0 and non-standard processes. Certainly the case in VITO backend for example. Still there is probably some kind of target upper bound a back-end wants/can provide. But I agree that it is probably messy to try to put a global version stamp on that.

However, in https://github.com/Open-EO/openeo-aggregator/issues/118 we found out that v1.x and v2.x processes don't mix nicely, because of rastercube (v1 style) vs datacube (v2 style) mismatch. This is a reason for a back-end to stick to v1.x or go all in on v2. So that's why I was wondering if this could be made more explicit in some way.

Note that this will be especially challenging in the aggregator where processes of multiple backend have to be combined, making the synchronization exercise considerable harder.

m-mohr commented 1 year ago

Yes, in a federated interface this needs either good alignment and a migration path that is followed by all back-ends or a good strategy in the aggregator to "mix" them. I'm not sure how version numbers would help here though. If you have a version number you'd still need to merge somehow, right? Isn't it enough there to just replace raster/vector-cube with datacube in comparison?

soxofaan commented 1 year ago

The path we're currently trying in the VITO backend is

(Note: I think we did the same when we supported both v0.4 and v1.0 of openEO API and processes)

We could do the same in the aggregator:

That implies that we set up the convention to have a hard link between API version and processes version: a given an API endpoint version, you also know if you get v1 or v2 processes. This goes a bit against the spirit of the openEO API, but it could be a workable more practical alternative to trying to introduce a new API to declare the version level of the processes.

m-mohr commented 1 week ago

Maybe we just add a version flag to the resposne of GET /processes? It can be either a specific version number, e.g. 1.0.0, or null/missing, which means unknown/mixed.

soxofaan commented 1 week ago

yes something like that would certainly help with the discussed use cases

m-mohr commented 1 week ago

See PR #549