将OpenAPI的AdditionalProperties默认设置为false

问题描述 投票:0回答:1

我的 OpenAPI 规范包含很多对象。根据 spec,自由形式的对象默认具有

additionProperties:true
。这就是为什么当我使用 NSwag 生成 C# 客户端时,所有请求和响应都包含一个字典
AdditionalProperties
。我不需要这些额外的属性。

有没有办法更改

additionalProperties
的默认值,这样我就不必修改 API 中的每个对象?

openapi
1个回答
0
投票

不,遗憾的是您无法全局设置

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;
© www.soinside.com 2019 - 2024. All rights reserved.