Skip to content

How to describe urls with ordered indexed array? #1504

Open
@denisvmedia

Description

@denisvmedia

Here is an example url that I tried to describe with OpenAPI, but failed:

http://example.com/api/items?filter[0][field]=value1&filter[0][type]=gte&filter[0][x]=490&filter[1][field]=value2&filter[1][type]=lte&filter[1][x]=200&filter[2][field]=value3&filter[2][type]=between&filter[2][x]=100&filter[2][y]=300

Some additional notes: we have an array of filters that should accept some values. The parameters can be represented in JSON like this:

[
  {
    "field": "value1",
    "type": "gte",
    "x": 490
  },
  {
    "field": "value2",
    "type": "lte",
    "x": 200
  },
  {
    "field": "value3",
    "type": "between",
    "x": 100,
    "y": 300
  }
]

With this type of query parameters indexing we get natural arrays in PHP without any additional "movements" using something like this:

parse_str('filter[0][field]=value1&filter[0][type]=gte&filter[0][x]=490&filter[1][field]=value2&filter[1][type]=lte&filter[1][x]=200&filter[2][field]=value3&filter[2][type]=between&filter[2][x]=100&filter[2][y]=300', $result);
var_dump($result);
/** output:
array(1) {
  ["filter"]=>
  array(3) {
    [0]=>
    array(3) {
      ["field"]=>
      string(6) "value1"
      ["type"]=>
      string(3) "gte"
      ["x"]=>
      string(3) "490"
    }
    [1]=>
    array(3) {
      ["field"]=>
      string(6) "value2"
      ["type"]=>
      string(3) "lte"
      ["x"]=>
      string(3) "200"
    }
    [2]=>
    array(4) {
      ["field"]=>
      string(6) "value3"
      ["type"]=>
      string(7) "between"
      ["x"]=>
      string(3) "100"
      ["y"]=>
      string(3) "300"
    }
  }
}
**/

So, this is not something exotic, this is a normal php-style query uri. But unfortunately it seems OpenAPI just doesn't support it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    param serializationIssues related to parameter and/or header serialization

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions