私は文書化しようとしているオープンAPIクエリ文字列は次のようになります
filtered[0][id]=code&filtered[0][value]=12345
id
およびプロパティを持つオブジェクトのリストが含まれますvalue
。
私のyaml
ドキュメントは次のようになります
parameters:
- name: filtered
in: query
description: filters to be applied
explode: true
style: deepObject
schema:
type: array
items:
properties:
id:
description: name of the field to be filtered
type: string
value:
description: value of the filter
type: object
問題は次の通りです。このstyle: deepObject
オプションは1つのレベルでしか機能せず、オブジェクトが実際に存在する2番目のレベルでは機能しないようです。つまり、次のようなクエリ文字列が期待されます。
?sorted[0]=%7B%0A%20%20%22id%22%3A%20%22string%22%2C%0A%20%20%22value%22%3A%20true%0A%7D
オブジェクトは、id
およびvalue
キーを持つ配列としてシリアル化されません。
これを解決する方法はありますか?
ベストアンサー1
OpenAPI 3.1ではこれは不可能です
OpenAPI 3.0/3.1仕様では現在、deepObject
動作が定義されています単純なオブジェクトのみ(プリミティブプロパティを持つ)
{
"id": 5,
"name": "Bob"
}
しかし配列には使用不可そしてネストされたオブジェクトには適用されません。
filtered[0][id]
配列とネストされたオブジェクトの動作は定義されていないため、クエリ文字列を記述する方法は実際にはありません。技術的には、 、 などを個別のクエリ パラメータとして定義するしかありませんfiltered[0][value]
。
既存の API を記述するのではなく、新しい API を設計する場合は、代わりにリクエスト本文でオブジェクトの配列を渡すことを検討してください。