如何在生产中禁用 Nelmio UI?
How to disable Nelmio UI in production?
有没有办法关闭所有 Nelmio Swagger UI 文档?在生产中,我希望外界在以下 URL 中看不到任何内容,但在开发中,它们应该正常显示有用的文档和沙箱:
似乎在 Nelmio 配置中应该有一个简单的开关,但我没有找到它。我的公司正在使用 Symfony 中的 Nelmio API Doc bundle 为非 public API 开发 APIs。 API 服务器向 public 公开,但我们没有兴趣向全世界公布其使用情况。
@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
现在有了 symfony4 和 flex,你可以正常安装包了
composer require nelmio/api-doc-bundle
(因此它不会在您的 composer.json
中设置为 require-dev
依赖项)
现在您将 project/config/bundles.php
中的设置更改为:
Nelmio\ApiDocBundle\NelmioApiDocBundle::class => ['dev' => true]
所以你不会得到错误(例如来自注释),但它不会从 Kernel.php
加载
不在 config/bundles.php 中加载包会在 Symfony 4.3 中引发异常 NelmioApiDocBundle 版本 3:
There is no extension able to load the configuration for "nelmio_api_doc"
我最终在环境中使用重定向禁用了 api 文档的路由,需要禁用它(产品):
#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
为了在特定环境中禁用 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
中),否则,如果您为另一个没有包的环境调用路由已加载,而不是 404,您将看到 500)
有没有办法关闭所有 Nelmio Swagger UI 文档?在生产中,我希望外界在以下 URL 中看不到任何内容,但在开发中,它们应该正常显示有用的文档和沙箱:
似乎在 Nelmio 配置中应该有一个简单的开关,但我没有找到它。我的公司正在使用 Symfony 中的 Nelmio API Doc bundle 为非 public API 开发 APIs。 API 服务器向 public 公开,但我们没有兴趣向全世界公布其使用情况。
@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
现在有了 symfony4 和 flex,你可以正常安装包了
composer require nelmio/api-doc-bundle
(因此它不会在您的 composer.json
中设置为 require-dev
依赖项)
现在您将 project/config/bundles.php
中的设置更改为:
Nelmio\ApiDocBundle\NelmioApiDocBundle::class => ['dev' => true]
所以你不会得到错误(例如来自注释),但它不会从 Kernel.php
不在 config/bundles.php 中加载包会在 Symfony 4.3 中引发异常 NelmioApiDocBundle 版本 3:
There is no extension able to load the configuration for "nelmio_api_doc"
我最终在环境中使用重定向禁用了 api 文档的路由,需要禁用它(产品):
#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
为了在特定环境中禁用 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
中),否则,如果您为另一个没有包的环境调用路由已加载,而不是 404,您将看到 500)