文档插件
文档插件可用于在您创建 API 后记录可用的端点。
如果已安装,文档插件将检查项目中的所有 API 以及配置中指定的任何插件上的内容类型和路由。然后,该插件将以编程方式生成文档以匹配 OpenAPI 规范。文档插件生成 路径对象 和 架构对象 并将所有 Strapi 类型转换为 OpenAPI 数据类型。
生成的文档可以在您的应用程序的以下路径中找到:src/extensions/documentation/documentation/<version>/full_documentation.json
安装
要安装插件,请在您的终端中运行以下命令:
yarn strapi install documentation
安装插件后,启动应用程序会生成 API 文档。
Swagger UI
文档插件使用 Swagger UI 可视化您的 API。要访问 UI,请在管理面板的主导航中选择 插件 > 文档。然后单击 打开文档 以打开 Swagger UI。使用 Swagger UI,您可以查看 API 上可用的所有端点并触发 API 调用。
安装后,可以通过以下 URL 访问文档插件 UI:
<server-url>:<server-port>/documentation/<documentation-version>
(例如,localhost:1337/documentation/v1.0.0
)。
经过身份验证的请求
Strapi 默认是安全的,这意味着您的大多数端点都需要用户获得授权。如果操作未在用户和权限中设置为公开,则必须提供您的 JWT。为此,请单击“授权”按钮并粘贴您的 JWT。
管理面板
此插件带有一个可在您的管理面板和配置文件中使用的界面。
限制对您的 API 文档的访问
默认情况下,任何人都可以访问您的文档。
要限制 API 文档访问,请从管理面板启用 受限访问 选项:
- 在管理面板的主导航中导航到
设置。
- 选择 文档。
- 将 受限访问 切换为
ON
。 - 在
password
输入中定义密码。 - 保存设置。
重新生成文档
更改 API 后,有两种方法可以更新文档:
- 重新启动应用程序以重新生成文档插件配置中指定的文档版本,
- 或转到文档插件页面并单击要重新生成的文档版本的 重新生成 按钮。
配置
文档插件使用以下配置初始化,其中可以通过在 config/plugins.js
中向文档插件的配置对象提供新值来更改所有属性:
module.exports = {
documentation: {
enabled: true,
config: {
'openapi': '3.0.0',
'info': {
version: '1.0.0',
title: 'DOCUMENTATION',
description: '',
termsOfService: 'YOUR_TERMS_OF_SERVICE_URL',
contact: {
name: 'TEAM',
email: 'contact-email@something.io',
url: 'mywebsite.io'
},
license: {
name: 'Apache 2.0',
url: 'https://www.apache.org/licenses/LICENSE-2.0.html'
},
},
'x-strapi-config': {
// Leave empty to ignore plugins during generation
plugins: ['upload', 'users-permissions'],
path: '/documentation',
},
'servers': [{ url: 'http://localhost:1337/api', description: 'Development server' }],
'externalDocs': {
description: 'Find out more',
url: 'https://docs.strapi.io/developer-docs/latest/getting-started/introduction.html'
},
'security': [{ bearerAuth: [] }]
}
}
}
创建文档的新版本
要创建文档的新版本,请按如下方式更新version
键:
module.exports = {
documentation: {
enabled: true,
config: {
info: { version: '2.0.0' },
},
},
}
指示哪些插件需要生成文档
如果您希望插件包含在文档生成中,则应将它们包含在 x-strapi-config
上的 plugins
数组中。默认情况下,该数组使用 ["upload", "users-permissions"]
初始化。
同样,如果您不希望插件包含在文档生成中,请提供一个空数组:
module.exports = {
documentation: {
enabled: true,
config: {
'x-strapi-config': {
// Default
plugins: ['upload', 'users-permissions'],
// Custom
plugins: ['upload'],
// Do not generate for plugins
plugins: [],
},
},
},
}
覆盖生成的文档
从生成中排除
要排除某些 API 或插件的生成,请使用应用程序或插件的 register
生命周期 中文档插件的 override
服务上的 excludeFromGeneration
。
excludeFromGeneration
可以更精细地控制生成的内容。
例如,pluginA 可能会创建几个新的 API,而 pluginB 可能只想为其中一些 API 生成文档。在这种情况下,pluginB 仍可以通过仅排除不需要的内容来从它确实需要的生成文档中受益。
excludeFromGeneration()
参数 | 类型 | 说明 |
---|---|---|
api | 字符串或字符串数组 | 要排除的 API/插件的名称或名称列表 |
module.exports = {
register({ strapi }) {
strapi
.plugin('documentation')
.service('override')
.excludeFromGeneration('restaurant')
// or several
strapi
.plugin('documentation')
.service('override')
.excludeFromGeneration(['address', 'upload'])
}
}
提供替换文档
如果文档插件无法生成您期望的内容,则可以替换已生成的内容。
文档插件公开了一个 API,允许您替换为以下 OpenAPI 根级键生成的内容:paths
、tags
、components
。
要提供覆盖,请使用应用程序或插件的 register
生命周期 中文档插件的 override
服务上的 registerOverride
函数。
registerOverride()
参数 | 类型 | 说明 |
---|---|---|
override | Object | OpenAPI 对象,包括以下任何键路径、标签、组件。接受 JavaScript、JSON 或 yaml |
options | Object | 接受 pluginOrigin 和 excludeFromGeneration |
options.pluginOrigin | 字符串 | 正在注册覆盖的插件 |
options.excludeFromGeneration | 字符串或字符串数组 | 要排除的 API/插件的名称或名称列表 |
提供覆盖的插件开发人员应始终指定 pluginOrigin
选项键。否则,无论用户的配置如何,覆盖都会运行。
文档插件将使用已注册的覆盖,用覆盖提供的值替换生成的文档上的通用键值。如果未找到通用键,插件将向生成的文档添加新键。
如果覆盖完全替换文档生成的内容,您可以通过在选项键数组 excludeFromGeneration
中提供要排除的 API 或插件的名称来指定不再需要生成。
如果覆盖仅应用于特定版本,则覆盖必须包含 info.version
的值。否则,覆盖将在所有文档版本上运行。
module.exports = {
register({ strapi }) {
if (strapi.plugin('documentation')) {
const override = {
// 仅对版本 1.0.0 运行此覆盖
info: { version: '1.0.0' },
paths: {
'/answer-to-everything': {
get: {
responses: { 200: { description: '*' } }
}
}
}
}
strapi
.plugin('documentation')
.service('override')
.registerOverride(override, {
// 如果用户不希望记录此插件,请指定来源
pluginOrigin: 'upload',
// 覆盖提供所有内容,但不生成任何内容
excludeFromGeneration: ['upload'],
})
}
},
}
提供覆盖系统是为了尝试简化修改生成的文档。这是插件添加或修改生成的文档的唯一方法。
文档插件的配置还接受 info['x-strapi-config']
上的 mutateDocumentation
函数。此函数接收可以更改的生成文档的草稿状态。它只能从应用程序应用,并在 OpenAPI 架构中拥有最终决定权。
mutateDocumentation()
参数 | 类型 | 描述 |
---|---|---|
generatedDocumentationDraft | 对象 | 应用覆盖的生成文档作为可变对象 |
module.exports = {
documentation: {
config: {
'x-strapi-config': {
mutateDocumentation: (generatedDocumentationDraft) => {
generatedDocumentationDraft.paths[
'/answer-to-everything' // 必须是现有路径
].get.responses['200'].description = '*'
},
},
},
},
}