swagger 如何在生产环境中禁用Nelmio UI?

wyyhbhjk  于 2023-08-05  发布在  其他
关注(0)|答案(5)|浏览(104)

有没有办法关闭所有Nelmio Swagger UI文档?在生产环境中,我希望外部世界在以下URL中看不到任何内容,但在开发中,它们应该正常显示有用的文档和沙箱:

似乎应该有一个简单的开关,这在Nelmio配置,但我还没有找到它。我的公司正在使用Symfony中的Nelmio API Doc捆绑包为非公共API开发API。API服务器是公开的,但我们不想向全世界公布它的使用情况。

ux6nzvsh

ux6nzvsh1#

@gp_sflover的评论让我走上了正确的道路,但它不仅仅是在AppKernel.php中禁用NelmioApiDocBundle。引用Nelmio的配置和路由将生成错误,直到您将它们移动到特定于开发人员的文件中。app/AppKernel.php中的以下更改是第一步:

public function registerBundles()
{
    $bundles = [
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        ...
        // new Nelmio\ApiDocBundle\NelmioApiDocBundle(), // <-- REMOVED FROM HERE
        new Nelmio\CorsBundle\NelmioCorsBundle(),
        new AppBundle\AppBundle(),
    ];

    if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
        $bundles[] = new Nelmio\ApiDocBundle\NelmioApiDocBundle(); // <-- ADDED HERE
        $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
        ...

字符串
为了消除配置错误,我必须将以下内容从app/config/config.yml中移到config_dev.yml中:

# nelmio Configuration
nelmio_api_doc:
    sandbox:
        enabled: true
    name: 'DLAP API Bridge'
    swagger:
        ...
    cache:
        enabled: false


类似地,以下内容来自app/config/routing.yml并移动到routing_dev.yml

NelmioApiDocBundle:
    resource: "@NelmioApiDocBundle/Resources/config/routing.yml"
    prefix:   /api/doc

nelmio_api_swagger:
    resource: "@NelmioApiDocBundle/Resources/config/swagger_routing.yml"
    resource: null
    prefix: /api-docs

iqxoj9l9

iqxoj9l92#

现在,使用symfony4和flex,您可以正常安装该软件包

composer require nelmio/api-doc-bundle

字符串
(So在composer.json中不会将其设置为require-dev依赖项)
现在,将project/config/bundles.php中的设置更改为:

Nelmio\ApiDocBundle\NelmioApiDocBundle::class => ['dev' => true]


所以你不会得到错误(例如从注解),但它不会从Kernel.php加载

7ajki6be

7ajki6be3#

为了在特定环境中禁用Nelmio api-doc-bundle,经过一些调查,我最终做了以下事情:

  • 仅在目标环境中启用捆绑包,即在project/config/bundles.php上有:
Nelmio\ApiDocBundle\NelmioApiDocBundle::class => ['dev' => true]

字符串

  • 把配置注解放在特定的环境(把nelmio_api_doc.yaml放在./config/packages/dev/里面)
  • 把路由文件nelmio_api_doc.yaml放在./config/routes/dev里面(而不是在./config/routes里面),否则,如果你在另一个没有加载bundle的环境中调用路由,而不是404,你会看到500)
thtygnil

thtygnil4#

config/bundles.php中没有加载bundle会在NelmioApiDocBundle Version 3Symfony 4.3中抛出异常:

There is no extension able to load the configuration for "nelmio_api_doc"

字符串
最后我在环境中使用重定向禁用了API文档的路由,这需要被禁用(prod):

#config/routes/prod/nelmio_api_doc.yaml
app.swagger:
    path: /api/doc.json
    methods: GET
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /
        permanent: true

app.swagger_ui:
    path: /api/doc
    methods: GET
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /
        permanent: true

yc0p9oo0

yc0p9oo05#

你也可以在通过控制台转储html文件时使用swagger UI配置禁用沙箱。

$ php bin/console nelmio:apidoc:dump --format=html --html-config '{"assets_mode":"offline","server_url":"https://example.com","swagger_ui_config":{"supportedSubmitMethods":[]}}' > api.html

字符串
文件:
https://symfony.com/bundles/NelmioApiDocBundle/current/commands.html
Swagger :
https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration

相关问题