説明
OpenAPI 3.0のServer Objectのvariablesは、URLテンプレート内の変数を置き換えるための定義です。未使用の変数が残ると、サーバーアドレスのどの部分を変更できるのか誤解されやすくなります。
想定される影響
利用者が効果のない変数を設定したり、環境ごとのアドレスを誤って管理したりする場合があります。未使用の変数自体がサーバーのアクセス制御を変更することはありません。
対処方法
URLテンプレートと変数名を照合し、使わない定義を削除してください。必要な変数ならURLに対応するプレースホルダーを追加し、デフォルト値から生成されるアドレスを確認してください。
例
Link Object内のサーバー設定に絞った抜粋です。完全なLinkには対象操作を指定するoperationIdまたはoperationRefも必要ですが、ここでは省略しています。
変更前
json
{
"openapi": "3.0.0",
"info": {
"title": "Simple API Overview",
"version": "1.0.0"
},
"paths": {
"/": {
"get": {
"summary": "List API versions",
"responses": {
"200": {
"description": "the user being returned",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"format": "uuid"
}
}
}
}
},
"links": {
"address": {
"server": {
"url": "https://development.{server}.com/{base}",
"variables": {
"base": {
"default": "v2"
},
"server": {
"default": "gigant-server"
},
"another": {
"default": "another"
}
}
}
}
}
}
},
"operationId": "listVersionsv2"
}
}
}
}
変更後
json
{
"openapi": "3.0.0",
"info": {
"title": "Simple API Overview",
"version": "1.0.0"
},
"paths": {
"/": {
"get": {
"summary": "List API versions",
"responses": {
"200": {
"description": "the user being returned",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"format": "uuid"
}
}
}
}
},
"links": {
"address": {
"server": {
"url": "https://development.{server}.com/{base}",
"variables": {
"base": {
"default": "v2"
},
"server": {
"default": "gigant-server"
}
}
}
}
}
}
},
"operationId": "listVersionsv2"
}
}
}
}
変更前のanotherはURLで使われていません。変更後は実際のプレースホルダーに対応するserverとbaseだけが残ります。