Replies: 4 comments 9 replies
-
Thanks @arnoweiss for putting this together. I think we need to have a clear problem statement. Specifically, is it claimed that the current approach cannot support key URL and deployment patterns? For example, is it claimed that given the current approach, the following URL patterns:
cannot be backed by two catalog services supporting different DSP protocol versions? Before diving into details, I also want to point out that URL (and by extension, URI) parsing is extremely easy in modern programming languages. For example, in Java, to handle the current scheme, one would do the following:
Other languages such as C#, Go, and Rust are just as easy. Given that, I don't think an argument can be made that the current approach is "too difficult to parse". Here are notes for discussion: client can try version-unawareIt's important to note that Approach A is independent of DIDs. Discovery is achieved by ensuring the metadata URL is derivable from the catalog URL via the ./well-known RFC. Using this approach, the simple cases (i.e., a single DSP version) remain simple: the client invokes the provider's catalog service URL. Versioning cases are also straightforward: derive the metadata URL from the catalog service URL (one line of Java code, see above), parse the result, and follow the link to the appropriate version. We could make this even simpler by requiring the path returned in the /.well-known document to be an absolute URL (see below). Approach B ties DSP to Web DIDs because it requires the client to always resolve the provider's Web DID to obtain the metadata URL and then parse the result to resolve an appropriate catalog service URL. In my opinion, this requirement is a non-starter. It also makes the simple case complex. Every request must resolve a DID, parse it, resolve the metadata URL, parse it, and resolve the catalog service. Approach C appears to replace the catalog service endpoint with a metadata endpoint. This is more complex because clients must always resolve and parse the metadata. approach also works for DataServiceAdding version information to the discovery in a non-did based dataspaceAs mentioned above, IMO it's a non-starter to require Web DIDs for DSP. The current EDWG specification architecture mandates a separation between the base protocol (DSP) and identity layers. We would need to change that mandate. ease of path navigationBased on the parsing example above, Approach A is as easy as Approach B, since no subtraction has to be done in modern languages. There is one case that is slightly more difficult, but not unreasonably so, given the following:
the ./well-known/dspace-version may return:
We could specify that the fault-tolerance for did-based but non-RFC8615 compliant connectorsThere are a couple of notes worth mentioning here. "Fault tolerance" concerns whether an approach supports a non-compliant RFC8615 implementation. Specifically, RFC8615 mandates that, "Well-known URIs are rooted in the top of the path's hierarchy; they are not well-known by definition in other parts of the path." Approach A follows the RFC specification. However, it does not restrict implementations from supporting other approaches. Whether this is desirable from an interoperability standpoint is another story, since provider connectors that use improperly formed Well-Known URIs will not be interoperable. By extension, approaches B and C specifically violate RFC8615. |
Beta Was this translation helpful? Give feedback.
-
I do not agree to the initial analysis, here are my thoughts on the different criteria: client can try version-unaware: There are two cases to distinguish:
approach also works for That would be an expectation, that a catalog received with a call in a certain DSP version contains only links that point to endpoints of the same version. If version magic would apply here every time, this does not make sense. Or do I miss here something. discovery in a non-did based dataspace: The problem in a non-did based dataspace is, that fundamentally at least one url has to be transfered from the provider to the client. I see no difference in sending a pure host based url that allows to use the .well-known interface or a complete base path to a service instance that would support approach B or C. There is no difference as we have no idea how the information is passed from provider to client. In fact, B or C allows to give again a precise link to the right service, whereas in approach A the client has to guess which of the offerings from the .well-known mechanism is the right one. fault-tolerance for did-based but non RFC8615 compliant connectors: I do not see this as a criteria, all approaches require a transfer of an url from provider to client either did or non-did based. It is a question of path magic needed how to come up with the right endpoint. One criteria is missing that is actually the issue with approach A: detection of another version of the catalog endpoint of the same DSP service: This feature cannot be provided by approach A, because it is in general not possible to determine for example the 2024-1 catalog endpoint of the same DSP service that has been provided by the did with the 2025-1 endpoint. This is only possible in specific cases, like only one DSP service available under this host. If there are multiple DSP services available, the current mechanism does not allow to isolate the same DSP service offering of another version, as the path magic needed leads to ambiguous results. If the returned DSP service does not provide a 2024-1 version of the catalog endpoint, the client has no chance to find out if he has to stop the interaction. This is solved by both approach B and C. So the main disadvantages of approach A are:
All of these disadvantages are solved by approach B and C. Both, B and C work with precise paths and version information and only require path additions as defined by the spec to get every relevant endpoint. This is the case for non-did based single version data spaces without any big disadvantage that I see. |
Beta Was this translation helpful? Give feedback.
-
To express also the issue in a sequence diagram Approach A - Status QuosequenceDiagram
participant PC as Provider DSP-Server
participant PW as Provider .well-known
participant PD as Provider Did Doc
participant CC as Consumer DSP-Server
autonumber
CC ->> PD: get
PD -->> CC: did doc with service pointing to<br/> a CatalogService endpoint https://<something>/catalog
CC ->> CC: strip all except <root>
CC ->> PW: get <root>/.well-known/dspace-version
PW -->> CC: HTTP 200 with dsp-versions
CC ->> CC: Do partial path comparisons to find out which version the catalog endpoint is pointing to
CC ->> PC: In case the right version is sent: POST https://<something>/catalog/request
CC ->> CC: In case another version is needed: Try to find a version endpoint in the right version with the biggest overlap,<br/>hope that it is from the same service,<br/>if not, no chance is there to decide that version is not supported.
CC ->> PC: POST https://<something different>/catalog/request and<br/>deal with all unexpected behavior because the wrong service might be addressed.
|
Beta Was this translation helpful? Give feedback.
-
And in addition, let's look at an example: DID Document:
and the dspace-version endpoint result:
Four questions:
I have no clue, how to make the answer, to question three and four, and the efforts to answer question two are simply not acceptable imho. |
Beta Was this translation helpful? Give feedback.
-
Community members have provided feedback (see #143) to the current versioning mechanism in the Dataspace Protocol. Those are valuable contributions and I've tried to distill the initial discussion into a more structured format. Please provide your criticism below: Are the diagrams correct? Are there additional features to be considered for analysis?
Approach A - Status Quo
Approach B - dedicated
metadata
endpointApproach C - Status Quo with different did-service
Analysis
versions
documentDataService
Catalog.service
array contains link where specific datasets can be negotiated for. To save an API-call, theversion
data would have to be added to theDataService
object.versions
data.Beta Was this translation helpful? Give feedback.
All reactions