从文档禁用操作

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

在 API 平台中,我想从文档中隐藏一些操作。所以我做了找不到操作并设置了

openapi: false

#[ApiResource(
    […]
    operations: [
        new Delete( controller: NotFoundAction::class, 
                    openapi: false,
                    read: false,
                    output: false 
                  )
    ]
)]

文档中仍然显示操作,我还需要做更多的事情吗?

我使用Api-Platform 3.2.5,缓存文件夹已被删除并再次预热¡.

symfony swagger-ui api-platform.com
1个回答
0
投票

在您的示例中,您有一些相互冲突的配置,这使得您不清楚您想要发生什么。

您希望操作存在,但不显示在生成的文档中

简单地做(这来自我为不同的东西设置的示例,所以忽略其他操作):

#[ApiResource(operations: [
    new Get(
        provider: PingProvider::class,
    ),
    new Post(
        input: CreatePing::class,
        messenger: 'input',
    ),
    new Delete(
        openapi: false,
    )
])]
readonly class Ping
{
    public function __construct(
        public string $id,
        public string $message = 'pong'
    ) { }
}

这会导致:

但是,

DELETE
操作仍然存在,尽管它不会被记录。但人们可以打电话给
DELETE /pings/123
,据说它会起作用。


或者也许您想完全删除

DELETE
操作?

然后简单地省略来自

operations
数组的操作:

#[ApiResource(operations: [
    new Get(
        provider: PingProvider::class,
    ),
    new Post(
        input: CreatePing::class,
        messenger: 'input',
    )
])]
readonly class Ping
{
    public function __construct(
        public string $id,
        public string $message = 'pong'
    )  {}
}

这会产生相同的文档:

但是这一次

DELETE
操作将完全停止工作。它不仅没有记录,而且调用
DELETE /pings/123
会导致
405
响应(“方法不允许”)。


在这种情况下,其他选项更加令人困惑。特别是

controller: NotFoundAction::class
那个。如果想要在文档中显示该操作,启用该操作,但不允许访问任何结果,则可以使用此选项,因此任何调用都会导致
404
(“找不到资源”)。完全不清楚为什么在这种情况下你会想要这个。

对于

read: false
output: false
也可以这样说。虽然这可以想象在这种情况下使用......但不清楚为什么你想要这个,或者它与问题有什么关系。


您提到您的配置不适合您。很抱歉,但是显示的配置将导致该操作不会显示在结果文档中。如果您的情况并非如此,则更有可能是其他原因(未包含在问题中)导致了您所说的结果。

© www.soinside.com 2019 - 2024. All rights reserved.