OAS 3.2 (and 3.3?) release planning #4210
handrews
started this conversation in
Enhancements
Replies: 2 comments 1 reply
-
Updating with thoughts from today's TDC call:
|
Beta Was this translation helpful? Give feedback.
0 replies
-
@handrews I thought that during the meeting we also discussed "specifying which characters can be used for parameters names" (i.e. ABNF for this section) but I can't find any reference to that work here? Did I misunderstand? Thanks for the help! |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
After struggling to figure out the right scope for 3.2, it occurred to me that a very quick, useful, and easy-to-implement 3.2, followed by a 3.3 that solves some more intractable problems that would otherwise have delayed 3.2 significantly, might be a better approach.
It was good that we did not put out a longer road map prior to the patch releases. Their scope was not clear, and it took us longer than expected to finish. But if we plan 3.2 and 3.3 together, that would be a pro-path-to-Moonwalk road map that would give our community some clarity. And this 3.2 "core work" as shown below would actually be quite easy to finish despite looking substantial, as much of it is already done.
3.2 core work
This is what I think 3.2 should have in it no matter what we decide regarding 3.3. Aside from the XML stuff (which, as noted, we should only do if we have a champion willing to step up) and the little bits and pieces, most of this is already well-thought-through or even already written in PR form. If this is our 3.2 release, we should be able to finish it very quickly.
text/event-stream
formatv3.2.0-dev
branch and just need porting)description
/summary
for Paths Object #3722description
property but allow it to be empty #3538api-version
so using this one for now)3.2 work if we are NOT going to also plan 3.3
These are things that I think we need to fix sooner rather than later, but the easier fixes add a lot of complexity to areas that are already far too complex. Incorporating these into 3.2 will make for more difficult-to-maintain bits of duct tape and will not get us closer to Moonwalk. We'll also have to spend time debating which sub-optimal duct-tape solutions to accept, which I find unappealing. It's always hard to do those because no one will feel satisfied with it.
This is why I think we should do these more comprehensively as explained in the 3.3 section further down:
encoding
field use keys like"0"
,"1"
,"2"
, etc. to correlate Encoding Objects with positional, unnamed parts. And maybe"*"
to match positions with no numbered encoding. That's the least-gross option I've come up with so far, and it's not pretty.)multipart/mixed
(and possibly bettermultipart/*
support in general) #3721multipart/byteranges
for 206 responses #3725in: queryString
and just use the HTTP message body solution forapplication/x-www-form-urlencoded
to solve these, it would be far better to provide a simpler solution that addresses a lot more of our parameter problems and moves us closer to Moonwalk)in
values)allowReserved
, which is already a confusing area)v3.2.0-dev
branch for these, but as @SensibleWood noted in issue Representation of Client-Initiated Backchannel Authentication (CIBA) in 3.2.0 #4106, it would be much better to reconsider this comprehensively)3.3
If we immediately move on to 3.3, it would be centered around two completely new mechanisms built alongside the existing features, which would be frozen (whether they would be deprecated is another discussion we can have if and when it is relevant- it doesn't really matter for now). These would address all of the issues in the previous section.
The idea here is to try out something more moonwalk-ish that can be implemented in a straightforward manner.
For Security:
For parameter and media type data modeling, my thoughts are are along the following lines, heavily influenced by the Moonwalk work on figuring out what tasks are involved in implementing the OAS.
NOTE: The purpose of this next lengthy section is to explain why we should consider a particular approach for 3.3. It is not intended to resolve the exact approach, which will need its own discussion and/or proposal.
First, let's review the problems:
The current approach to data modeling involves various combinations of the Schema, Encoding, Media Type, Parameter, and/or Header Objects:
form-urlencoded
vsform-data
multipart/mixed
, but it never has (we dropped the claim in 3.0.4 and 3.1.1, but we know from Slack and issues that this support is needed)In truth, there are three parts to data modeling. Of these three, modeling mostly works, but we treat mapping inconsistently, and conflate it with encoding
style
,explode
,contentType
(formultipart
, and maybe sort-of forform-urlencoded
?), special treatment of array schemas (formultipart
only), and maybecontentMediaType
andcontentSchema
(except that they overlap with other fields and are sometimes ignored)style
andexplode
also automatically trigger encoding/escaping behavior that is frequently undesirable or outright wrongstyle
andexplode
leverage RFC6570, but also include non-RFC6570 options that don't play nicely with RFC6570's assumptionsencoding
field correlates Schema and Encoding Objects by property (part) name; however, we need to handle sequential formats and formats like headers that have both a sequential and named aspectstyle
andexplode
in some areas where it would be helpful, for various reasons – even when these reasons are good, the result is confusingly inconsistent behavior"
needs to be represented as either"\""
or with a unicode hex escape that I can't currently recallallowReserved
,contentEncoding
, rules that we inherit from other standards, and/or the Encoding Object'sheaders
field+
as an escape for space inform-urlencoded
data at all, and I imagine some APIs use that conventionWe would be better off making a single-schema approach to parameters (as proposed for Moonwalk!) that addresses these three parts in a comprehensive way. I do not mean coming up with some elaborate universal way to map any JSON Schema to any other format. I mean something that is the same for all sequential formats, and the same for all named formats, and when you have something like an HTTP header that has a primary value followed by parameters (essentially a tuple where the 2nd entry is an object), it is consistent with the basic sequential and named rules. Furthermore, the mapping would be handled separately from the encoding, so it is never possible (or at least not without really working hard at it) to use the wrong kind of encoding/escaping by accident.
While this would not be trivial, it would produce something far easier to implement than any patchwork of duct tape fixes to the current pile of Objects involved, solve far more of our users' problems, and produce valuable feedback for Moonwalk before we lock in a new major version.
Open questions
$ref
? One option would just be to say that, for Path Item Objects, a Reference Object can overwrite any Path Object field (not justsummary
anddescription
), which would move the$ref
from the Path Item Object to the Reference Object and leverage the Reference Object's existing behavior)operationRef
where the behavior depends on parent structures that might not be unique)Beta Was this translation helpful? Give feedback.
All reactions