Repository navigation
Conversation
… content-type parsing (aws-powertools#8581)
|
Thanks a lot for your first contribution! Please check out our contributing guidelines and don't hesitate to ask whatever you need. |
leandrodamascena
left a comment
There was a problem hiding this comment.
Thanks @yagruda, confirmed on all three points. I ran it behind a real REST API and a real HTTP API with the same function: a single x-country value is accepted as a one-item list on every resolver, repeated x-req lines on REST come back as "a,b" like HTTP API already did, and Application/JSON, application/problem+json and application/vnd.api+json are parsed as JSON while text/plain still gets a 415. Comparing the media type exactly also closed a small hole, application/jsonx used to pass the startswith check.
Approving. This goes out in 3.39.0, so it will sit here for a while before I merge it. No rebase needed in the meantime, and you'll be credited in the release notes. I'll mention the repeated-header change on REST in the notes since it turns a 422 into a 200.
…unreachable list-wrapping branches
leandrodamascena
left a comment
There was a problem hiding this comment.
One more push from my side: the two [value] branches were unreachable, headers always arrive as a string and query strings as a list, so I removed them and added tests for the paths that were still uncovered: an optional sequence header that is not sent, and a header model whose list[str] field gets a single value or a comma-joined one. Patch coverage is 100% now. Re-approving, nothing changes for you.
|
Nice job, thank you! |



Issue number: closes #8581
Summary
Changes
OpenAPIRequestValidationMiddleware:_normalize_multi_paramsand_process_model_paramto convert single string values into single-item lists (and split comma strings if unparsed), ensuring sequence headers likelist[str]validate consistently across HTTP API, Function URL, ALB, and VPC Lattice._restore_scalar_parameterby removing the multi-value exclusion for headers, aligning with RFC 9110 Section 5.3 where multiple header lines are equivalent to a comma-separated list._get_bodyto extract the media type without parameters, compare case-insensitively, and accept+jsonmedia types (such asapplication/problem+jsonandapplication/vnd.api+json).test_native_repeated_parameters_keep_existing_behaviorintest_openapi_comma_parameters.pyand added regression test cases intest_openapi_validation_middleware.py.User experience
x_country: Annotated[list[str], Header(alias="x-country")]accepts single values on all resolvers (e.g.x-country: US) instead of failing with 422list_typeon HTTP API / Function URL / ALB.multiValueHeaders) are joined into a comma-delimited string consistently across REST and HTTP API resolvers instead of raising 422string_type.Content-Type: Application/JSONorapplication/problem+jsonare parsed as JSON rather than rejected with 415.By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.