- From: Ben Francis <ben@krellian.com>
- Date: Thu, 25 Apr 2024 12:20:13 +0100
- To: Public Web of Things WG <public-wot-wg@w3.org>
- Message-ID: <CAMpSprnRA_a6+Cg34f+w9cg4hOYgHApTBoX+NNJ8gnk8wJSHSA@mail.gmail.com>
I read the meeting minutes of the WoT Profile meeting on 2024-04-23 <https://www.w3.org/2024/04/23-wot-profile-minutes.html> and I see more discussion about how to unblock WoT Profiles 1.0, but so far no formal resolution. Much of the conversation is focused on protocol bindings for asynchronous actions, but I think this is just one example of the underlying question which needs to be answered (by the wider Working Group) in order to proceed. Namely: *Should profile specifications in WoT Profiles 1.0 be allowed to define protocol bindings and payload bindings which go beyond what is currently possible to define in a Thing Description using binding templates?* What we have discovered through implementation experience is that there are some operations defined in the Thing Description specification (queryaction and cancelaction being obvious but not the only examples), for which common approaches to implementation can not be unambiguously described using the current binding template mechanism alone. One significant underlying issue is the lack of a way to unambiguously describe dynamic resources when using the HTTP protocol, but there countless other details like: - How to describe the payload format for meta operations like writeallproperties, writemultipleproperties, observeallproperties, unubserveallproperties, subscribeallevents, unsubscribeallevents and queryallactions (see https://github.com/w3c/wot-thing-description/issues/1665) - How to describe which fields in a Server-Sent Event message correspond to the event name, event data (as described in the data schema) and event ID - Which content-type to use for Server-Sent Events (see https://github.com/w3c/wot-binding-templates/issues/347) - How to describe dynamic Webhook subscription endpoint URLs which are served by a Consumer rather than a Thing - How to describe an event payload format for a Webhook which wraps around the actual event data described by a data schema - Other ambiguities around the mapping of event data schemas (see https://github.com/w3c/wot-thing-description/issues/817) and subscription IDs (see https://github.com/w3c/wot-thing-description/issues/887) In WoT Profiles 1.0 we currently work around a lot of these ambiguities by simply describing the expected behaviour in assertions in the "protocol binding" sections of profiles. Some people are uncomfortable with this approach because they think that profiles should only constrain a "subset" of what is possible to describe in a Thing Description using a binding template, and not go beyond that. This is because if a Consumer which doesn't implement a given profile comes across a Thing which depends upon it, the Consumer may not be able to fully interoperate with that Thing (I would argue that would be the case regardless, and is the reason profiles are needed in the first place). Essentially we have ended up with two separate mechanisms for describing protocol bindings (profiles and binding templates) which work well for different use cases (greenfield and brownfield implementations respectively), but which don't always work well together and sometimes may even conflict with each other. I have a detailed proposal ( https://lists.w3.org/Archives/Public/public-wot-wg/2024Feb/0000.html) for how to fix this conflict in WoT 2.0, but in the meantime we need to decide what to do about the WoT Profiles 1.0 specification, which depends on the WoT Thing Description 1.1 specification that can no longer be changed. It has been suggested that we could simply remove the problematic features (e.g. asynchronous actions) from the Profiles specification, and then proceed towards a Recommendation. However, my concern with that approach is that the issues are more wide ranging than people realise (see the examples above), and that if we pursue it through to its natural conclusion we will end up with a shell of a specification which is probably not worth publishing (since it will not add much to what's already specified as defaults in the TD specification). I therefore think there are two realistic options (see https://github.com/w3c/wot-profile/issues/401): *Option 1* Agree as a Working Group that for Profiles 1.0 profile specifications are allowed to define protocol bindings that go beyond what can currently be described with binding templates, as a more prescriptive but unambiguous option to guarantee interoperability between greenfield implementations. Publish a Candidate Recommendation, publicise a request for implementations, and if there are sufficient implementations then proceed to Proposed Recommendation. *Option 2* Decide now that profiles must only constrain what is already possible with binding templates in TD 1.1, discontinue the approach taken in WoT Profiles 1.0, publish the current text as a Working Group Note and start work on a Profiles 2.0 specification which takes a different approach. My personal preference would be option 1 because it's going to be a long time until TD 2.0 is published and I think profiles are needed for interoperability in the meantime (I am working on commercial products which rely on them). However, if option 2 is what is needed to unblock work on profiles then I would support that. I would also be open to other suggestions, such as a detailed proposal for what features to remove from the current specification to make it acceptable. I would of course be interested to hear other opinions, but then suggest moving quickly to a formal resolution so that the profile task force can continue its work. Kind regards Ben -- Ben Francis Founder Krellian Ltd. <https://krellian.com>
Received on Thursday, 25 April 2024 11:20:29 UTC