Patch releases 4.4.3 / 5.0.2 change the OpenAPI document of array query parameters (#8600), duplicating `key[]` into `key[][]`
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 48/100
Direzione di ricerca
Start by reading OpenApiFactory::collectPaths() and reproduce the reported output with the two QueryParameter definitions. Check the existing OpenAPI tests for array query parameters and compare the generated parameters for keys with and without [] across the affected versions. Done means the generated document avoids the unintended duplicate variant while preserving the intended parameter behavior.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
API Platform version(s) affected: 4.4.3 and 5.0.2 (api-platform/openapi), compared with 4.4.2 and 5.0.1
Description
#8600 (fixing #8421) changed how OpenApiFactory documents a filterless QueryParameter whose schema is type: array: when castToArray is not set, it now documents the parameter twice, as key and as key[] (the latter with style: deepObject, explode: true).
This shipped in patch releases and changes the generated OpenAPI document of any application with such a parameter:
- Every filterless array parameter gains a second documented parameter (
ids→ids+ids[]). - When the key already ends with
[](a common way to document theids[]=1&ids[]=2form the server parses), the added parameter iskey[][], which the server never accepts (status[]→status[]+status[][]).
The 4.4.3 changelog lists #8600 under "Bug fixes", with no warning. The 5.0.2 changelog explains that #8598 was reverted from 4.4 because "a schema change must not ship in a patch release". #8600 is a schema change of the same kind.
How to reproduce
#[ApiResource(
operations: [
new GetCollection(
uriTemplate: '/repro',
parameters: [
'status[]' => new QueryParameter(
schema: ['type' => 'array', 'items' => ['type' => 'string']],
required: false,
),
'ids' => new QueryParameter(
schema: ['type' => 'array', 'items' => ['type' => 'string']],
required: false,
),
],
),
],
)]
final class ReproResource
{
public ?string $id = null;
}
bin/console api:openapi:export, parameters of GET /api/repro (name, style):
api-platform/openapi |
Documented parameters |
|---|---|
| 4.4.2, 5.0.1 | status[] (form), ids (form) |
| 4.4.3, 5.0.2 | status[] (form), status[][] (deepObject), ids (form), ids[] (deepObject) |
In our application the 4.4.3 bump adds 421 parameters across 16 operations. The runtime behaviour is unchanged, but:
- generated clients change: Orval 8.39 adds a
'status[][]'?property next to'status[]'?on every params type; - a CI check comparing the committed OpenAPI document with a fresh export fails on a routine Dependabot patch bump.
Possible Solution
- Revert #8600 from 4.4, as was done for #8598, and keep it in 5.x documented as a behaviour change.
- In any case, do not emit the
key[]variant when the key already ends with[], e.g. inOpenApiFactory::collectPaths()(untested suggestion):
$canSplitToArray = null === $linkParameter
&& 'query' === $in
&& 'array' === ($parameterSchema['type'] ?? null)
&& !str_ends_with($key, '[]');
Additional Context
Workaround: set castToArray: false on these parameters. The document then lists the key as written only (status[]). It has no runtime effect: in 4.4.3 and 5.0.2, ParameterParserTrait and ParameterValidationConstraints only act on castToArray: true.
Removing the brackets from the keys and setting castToArray: true also documents key[] only, but it changes runtime behaviour: a scalar value (status=lost) is then cast to an array and accepted, where it was rejected with a 422 before.
- Lingua principale
- PHP
- Stelle
- 2.6k
- Fork
- 984
- Merge medio
- 1g 10h
- PR unite (30g)
- 88
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di api-platform/core
-
Symfony 8.2: object mapper feature probe loads deprecated translation commandForse già presa @tacman l’ha presa 4 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
api-platform/core#8626 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
api-platform/core#8612 ·
I maintainer di solito rispondono entro 1 giorno
-
HTTP cache purgers error handling and performance issuesForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 38/100
api-platform/core#8591 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
api-platform/core#8535 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 58/100
api-platform/core#8499 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di api-platform/core
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
awslabs/aidlc-workflows#1879 ·
I maintainer di solito rispondono entro 1 giorno
-
bug customer-reported
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
MagnaCapax/PMSS#1011 ·
I maintainer di solito rispondono entro 5 giorni
-
Talk Review
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
socallinuxexpo/scale-drupal#351 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
code4romania/cpc#47 ·
I maintainer di solito rispondono entro 1 giorno
-
Bug Status: Needs Triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno