Serialization은 data structures 혹은 객체를 전송 가능한 형태(데이터스트림)로 만들고 후에 재구성하는 것을 말한다.
OpenAPI 3.0은 배열과 객체를 operation parameters(path, query, header, cookie)로 사용할 수 있도록 지원하고 어떻게 serialization할지 명시하도록 한다.
serialization 방법은 style
과 explode
키워드로 결정된다.
style
은 multiple values를 어떻게 구분할 것인지 결정한다.
path, query, header, cookie
에 따라 가능한 style이 다르다.
explode
(true/false)는 배열과 객체의 각 요소나 프로퍼티에 대해 별도의 매개변수를 생성해야 하는지 여부를 명시한다.
OpenAPI 직렬화는 RFC 6570에 정의된 URI template 패턴들의 일부를 기반으로 한다.
path parameters는 다음의 style
값들을 지원한다.
{param_name}
URI template{.param_name}
URI template{;param_name}
URI template기본 직렬화 방법은 style: simple
과 explode: false
다.
별이 붙은 것이 기본 값이다.
query parameters는 다음의 style
값들을 지원한다.
{?param_name}
URI template.collectionFormat: ssv
와 동일하다. non-exploded arrays(explode: false
)에만 적용된다. collectionFormat: pipes
와 동일하다. non-exploded arrays(explode: false
)에만 적용된다. paramName[prop1]=value1¶mName[prop2]=value2&...
이렇게 직렬화된다.기본 직렬화 방법은 style: form
이고 explode: true
다.
별표가 기본값이다.
alloweReversed
키워드는 :/?#[]@!$&'()*+,;=
이 값들이 parameter 값으로 쓸 때 그대로 허용할지 percent-encoded 되도록 할지를 결정한다.
기본적으로 alloReversed: false
이다. 그리고 기본적으로 percent-encoded된다. /
-> %2F (or %2f)
로 encoding 되기 때문에 quotes/h2g2.txt
-> quotes%2Fh2g2.txt
로 전송된다.
Header parameters는 항상 style: simple
이다. explode
키워드 값이 객체 직렬화를 위해 선택적으로 사용된다.
cookie parameters는 항상 style: form
이다. explode
키워드 값이 배열과 객체 직렬화를 위해 선택적으로 사용된다.
아래 예시는 path를 /users{id}
처럼 할 때 정의하는 방법이다.
paths:
# /users;id=3;id=4?metadata=true
/users{id}:
get:
parameters:
- in: path
name: id
required: true
schema:
type: array
items:
type: integer
minItems: 1
style: matrix
explode: true
- in: query
name: metadata
schema:
type: boolean
# Using the default serialization for query parameters:
# style=form, explode=false, allowReserved=false
responses:
'200':
description: A list of users