我的 OpenAPI 规范包含很多对象。根据 spec,自由形式的对象默认具有
additionProperties:true
。这就是为什么当我使用 NSwag 生成 C# 客户端时,所有请求和响应都包含一个字典AdditionalProperties
。我不需要这些额外的属性。
有没有办法更改
additionalProperties
的默认值,这样我就不必修改 API 中的每个对象?
不,遗憾的是您无法全局设置
additionalProperties
。手动编写 api 模式时,您必须为每个自由格式对象添加选项。
但是,当通过框架创建 api 模式时,您有时可以通过为您设置
additionalProperties
选项的方式扩展 swagger 生成器。以下是 Laravel 和 asp.net 的示例:
config/l5-swagger
return [
// ...
'default' => [
// ...
'scanOptions' => [
// ...
'processors' => [
new \App\SwaggerProcessors\DisableAdditionalProperties(),
],
],
],
];
app/SwaggerProcessors/DisableAdditionalProperties.php
<?php
declare(strict_types=1);
namespace App\SwaggerProcessors;
use OpenApi\Analysis;
use OpenApi\Generator;
/**
* Adds "additionalProperties": false to each schema if it's not set
*/
class DisableAdditionalProperties
{
public function __invoke(Analysis $analysis)
{
if (is_object($analysis->openapi->components) && is_iterable($analysis->openapi->components->schemas)) {
foreach ($analysis->openapi->components->schemas as $key => &$schema) {
if ($schema->additionalProperties === Generator::UNDEFINED) {
$schema->additionalProperties = false;
}
}
}
}
}
schema.AdditionalPropertiesAllowed = true;