Mažas
Mažas

Reputation: 397

How to serialize query object with custom delimeter

I have yaml file:

openapi: 3.0.1
info:
  title: My API
  version: v1
paths:
  # /users;id=3;id=4?metadata=true
  /users:
    get:
      parameters:
        - in: query
          name: offset
          schema:
            type: integer
          description: The number of items to skip before starting to collect the result set
        - in: query
          name: limit
          schema:
            type: integer
          description: The numbers of items to return
        - in: query
          name: origin
          style: form
          explode: false
          schema:
            type: object
            properties:
              city:
                type: string
              zip:
                type: string
      responses:
        '200':
          description: A list of users

When I click "execute" in https://editor.swagger.io, the generated Curl looks like this:

curl -X GET "https://editor.swagger.io/users?offset=2&limit=12&origin=city,atlanta,zip,303" -H "accept: */*"

However, I need it to be like this:

curl -X GET "https://editor.swagger.io/users?offset=2&limit=12&origin=city:atlanta|zip:303" -H "accept: */*"

Is it possible to do this? I could not find any info in documentation about setting custom delimeters.

Upvotes: 1

Views: 827

Answers (1)

Peter
Peter

Reputation: 5194

Short answer: No.

Your specific use case isn't covered by serialize parameters and they follow the rfc6570 - it's a good idea to follow the standard if you want to design a well accepted web api.

You specified explode: false and style:form. When you turn explode:true on you will get this instead:

city=atlanta&zip=303

When you specify style:deepObject you will get:

origin[city]=atlanta&origin[zip]=303

The spaceDelimited and pipeDelimited style won't work with objects.

Working without schema

You can of cause work without a schema and define your origin query parameter of type string. The documentation should explain exactly what you expect and a little example will help people to use your API.

I won't use that pattern for an open API, but this can be a workaround for an internal API.

Upvotes: 1

Related Questions