-
Notifications
You must be signed in to change notification settings - Fork 9.2k
Open
Labels
headersmedia and encodingIssues regarding media type support and how to encode data (outside of query/path params)Issues regarding media type support and how to encode data (outside of query/path params)
Milestone
Description
For example, as described in the guide, in a request such as
POST /upload HTTP/1.1
Content-Length: 428
Content-Type: multipart/form-data; boundary=abcde12345
--abcde12345
Content-Disposition: form-data; name="profileImage"; filename="image1.png"
Content-Type: application/octet-stream
{…file content…}
--abcde12345--how would a spec state that the filename parameter in header Content-Disposition is required and explain special usage in a description?
RFCs state that the filename parameter is optional.
It's not clear how to express parameters for a header object.
LasneF
Metadata
Metadata
Assignees
Labels
headersmedia and encodingIssues regarding media type support and how to encode data (outside of query/path params)Issues regarding media type support and how to encode data (outside of query/path params)
Type
Projects
Relationships
Development
Select code repository
Activity
spacether commentedon Feb 21, 2021
If the Content-Disposition will be manually passed in by devs, how about setting it as type string in parameter.schema.type and set required to true in parameter.required. You could also add a regex pattern in parameter.schema.pattern that must pass for the value of Content-Disposition that describes the filename value as a string with length > 0.
Don't forget to include the body description like so.
In openapi-generator in the python client. We have a spec like this:
lmmarsano commentedon Mar 28, 2021
This doesn't match the request, however.
It's
multipart/form-data.I'm trying to follow the discussion on specifying headers for those.
The header,
Content-Disposition, is standard.However, the spec needs to say the parameter,
filename, is required.I'm thinking the
parameterobject for the header would need some combination ofstylematrixandschematypeobject.RFC 6570 says
However, this will put a
;beforeform-data, which is incorrect.Is there something like path templating for headers?
handrews commentedon Jan 28, 2024
@lmmarsano unfortunately, there's no clear mapping from schemas or parameter styles into HTTP headers, in part because the syntax is pretty inconsistent across different headers. I think the best you could do would be to treat it as a string and use a regex 😕
github-actions commentedon Feb 4, 2024
This issue has been labeled with
No recent activitybecause there has been no recent activity. It will be closed if no further activity occurs within 28 days. Please re-open this issue or open a new one after this delay if you need to.lmmarsano commentedon Feb 5, 2024
@handrews While I agree it's a challenge, it's not entirely inconsistent.
The http specification defines a set of rules for the bulk of cases.
,except forset-cookieRegex complexity to account for these rules can be considerable.
A regex-only solution may often force us to choose between
For clearer, more maintainable specs, I wonder about interest in making the language more aware of the http spec on headers.
While I understand OpenAPI specs largely serve http APIs with JSON payloads, the introduction states it's for http APIs generally, and this seems the logical place for rules in the http spec.
If the interest exists, I also wonder how we might best approach that
handrews commentedon Feb 5, 2024
@lmmarsano I had actually been thinking about leveraging the rules for the common cases (RFCs 8941 and 9110) and having an extension registry for mechanisms to support more unusual cases.
We can keep discussing headers here to see if there is something that might fit in OAS 3.2 (possibly leveraging the registries).
For the bigger-picture questions of modularity and extension, I would recommend looking at the Moonwalk discussions, where we are discussing breaking changes for the next major OAS release.
lmmarsano commentedon Feb 6, 2024
Cool, I didn't know about moonwalk.
I'm seeing approaches suggested here overlapping with the inclusion principle, reuse of internet standards, and
parameterSchema.Based on the participation guidelines, a draft feature in the registry you suggested makes sense.
RFC 8941 is stricter and more structured, so it might be preferable.
retry-after, so I imagine API authors wanting to represent such fields. While the http core production for http dates appears to be absent from the structured fields spec, the core spec states that members containing,ought to be delimited (probably by”): the stricter specification identifies such values as strings. Would defining a JSON schema format for http date be appropriate here?handrews commentedon Apr 28, 2024
For HTTP dates, yeah we'd need to add a
formatvalue to the registry, probably.I think that RFC 8941 would be handled one way (with one set of
formatvalues as needed), and the "common rules" in RFC 9110 would be handled another. They're similar, but we'd want to make a distinction because of various subtleties. That might include not worrying about the distinction between quoted strings and tokens for 9110, but making that distinction for 8941.This would be for 3.2 (at the earliest), so there's some time to think about this while we focus on getting 3.0.4 and 3.1.1 out the door.
contentTypefield: "comma-separated list of the two types"? #3739kevinswiber commentedon Oct 1, 2024
FYI: RFC 9651 has obsoleted RFC 8941.
multipart/form-data's request'sfilenamedirective? #4442