URLのオブジェクトパラメータをクエリ文字列としてエンコードしたいGETルートがあります。
Swaggerドキュメントを作成すると、基本的に、schema
タイプパラメータでobject
/query
タイプを使用できないというエラーが発生します。
paths:
/mypath/:
get:
parameters
- in: path
name: someParam
description: some param that works
required: true
type: string
format: timeuuid #good param, works well
- $ref: "#/parameters/mySortingParam" #this yields an error
parameters:
mySortingParam
name: paging
in: query
description: Holds various paging attributes
required: false
schema:
type: object
properties:
pageSize:
type: number
cursor:
type: object
properties:
after:
type: string
format: string
オブジェクト値を持つリクエストクエリパラメータは、実際のリクエストにエンコードされます。
Swaggerは画面の上部にエラーを表示しますが、オブジェクトはSwagger UIエディターで正しくレンダリングされますが、そのエラーはドキュメントの上部に表示されます。
クエリパラメータはプリミティブ型のみをサポートしているため、Swagger仕様のクエリパラメータとして「オブジェクト」を使用できるとは思いません( https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0 .md#data-types )
これは、OpenAPI3.0で可能になりました。
parameters:
- in: query
name: values
schema:
type: object
properties:
genre_id:
type: integer
author_id:
type: integer
title:
type: string
example:
{
"genre_id": 1,
"author_id": 1
}
style: form
explode: true
ここでは、style
およびexplode
キーワードを使用して、パラメーターのシリアル化方法を指定できます。
上記の例では、URLは次のようになります。
https://ebookstore.build/v1/users/books/search?genre_id=1&author_id=1
OpenAPI v3でのパラメーターの説明とパラメーターのシリアル化の詳細については、 ここ を参照してください。
これは可能ですが、OpenAPI2.0では不可能です。 OpenAPI 3.0は、これがどのように可能であるかをここで説明しています。
https://swagger.io/docs/specification/describing-parameters/
parameters:
- in: query
name: filter
# Wrap 'schema' into 'content.<media-type>'
content:
application/json: # <---- media type indicates how to serialize / deserialize the parameter content
schema:
type: object
properties:
type:
type: string
color:
type: string
それまでの間、クエリパラメータを単純な古い文字列型として使用し、手動でシリアル化を実行してから、必要に応じてクエリパラメータを設定することができます。これは、SwaggerUIがOpenAPI3.0を完全にサポートするまで私が行っていることです。