説明
OpenAPI 3.0 では、components.parameters のパラメーター定義を複数の操作から $ref で再利用できます。参照先がないと、入力の場所、型、必須かどうかを文書で十分に説明できない場合があります。
想定される影響
- API 利用者が必要なパラメーターを省略したり、誤った形式で送信したりする可能性があります。
- 参照エラーにより仕様書の検証やクライアント生成が失敗する場合があります。
対処方法
パラメーターの $ref が意図した Parameter オブジェクトを指すことを確認してください。ローカル参照は components.parameters の名前と正確に一致させ、定義名を変更した場合はすべての参照も更新してください。変更後に参照と入力定義を検証してください。
例
最初の例は、定義されていない wrongParameter を使用しています。
変更前
json
{
"openapi": "3.0.0",
"info": {
"title": "Simple API Overview",
"version": "1.0.0"
},
"paths": {
"/": {
"get": {
"operationId": "listVersionsv2",
"summary": "List API versions",
"responses": {
"200": {
"description": "Success"
}
},
"parameters": [
{
"$ref": "#/components/parameters/wrongParameter"
}
]
}
}
},
"components": {
"parameters": {
"limitParam": {
"name": "limit",
"in": "query",
"description": "max records to return",
"required": true,
"schema": {
"type": "integer"
}
}
}
}
}
変更後
json
{
"openapi": "3.0.0",
"info": {
"title": "Simple API Overview",
"version": "1.0.0"
},
"paths": {
"/": {
"get": {
"operationId": "listVersionsv2",
"summary": "List API versions",
"responses": {
"200": {
"description": "Success"
}
},
"parameters": [
{
"$ref": "#/components/parameters/limitParam"
}
]
}
}
},
"components": {
"parameters": {
"limitParam": {
"name": "limit",
"in": "query",
"description": "max records to return",
"required": true,
"schema": {
"type": "integer"
}
}
}
}
}
変更後は limitParam を参照し、limit を必須の整数型クエリパラメーターとして定義しています。サーバー側の実際の入力検証も、この契約と一致させる必要があります。