核心是让文档工具读取环境变量动态设置baseurl:scribe中配置'base_url' => env('api_base_url'),l5-swagger通过'host' => env('swagger_host')注入,ci/cd中用secrets安全注入并清缓存后以app_env=staging执行生成命令。

要为不同环境的 API 文档设置独立 BaseURL,核心是让文档生成工具(如 Scribe、l5-swagger 或 apidoc-generator)读取当前环境对应的 API 地址,而不是硬编码或只依赖一个全局值。这直接影响请求示例、调试链接和前端调用的准确性。
在 Scribe 中按环境动态设置 base_url
Scribe 的 config/scribe.php 支持从配置项读取 base_url,而该配置项可由 .env 驱动。只需确保:
-
base_url字段使用env()函数,例如:'base_url' => env('API_BASE_URL', env('APP_URL') . '/api') - 各环境的
.env.{APP_ENV}文件中定义对应变量,如.env.staging写:API_BASE_URL=https://staging-api.example.com/v1;.env.production写:API_BASE_URL=https://api.example.com/v1 - 部署时确保
APP_ENV已通过系统级变量设置(如 Nginx 的fastcgi_param APP_ENV staging),否则 Laravel 不会加载.env.staging,env('API_BASE_URL')将 fallback 到默认值
在 l5-swagger 中实现环境感知的 host 和 schemes
l5-swagger 基于 OpenAPI 规范,其 JSON/YAML 输出中的 host 和 schemes 字段需匹配运行环境。推荐做法是:
- 在
config/l5-swagger.php的'additional_config'中注入动态值:'host' => env('SWAGGER_HOST', request()->getHost()) - 若需完全隔离,可在
paths.annotations指向的控制器注解中使用@openapi块,并配合环境判断逻辑(不推荐);更稳妥的是在生成命令前临时覆盖配置:SWAGGER_HOST=api.prod.example.com php artisan l5-swagger:generate - 确保
SWAGGER_HOST变量仅出现在.env.staging或.env.production中,开发环境留空则自动 fallback 到当前请求域名
统一管理:通过命名 HTTP client 注入 BaseURL 到文档上下文
当多个文档工具共存,或需复用同一套 API 地址策略时,可借助 Laravel 的命名 HTTP client 统一出口:
- 在
config/services.php中定义:'api_docs' => ['base_uri' => env('API_BASE_URL')] - 在文档生成命令的预处理逻辑(如自定义 Artisan 命令)中调用:
Http::client('api_docs')->baseUrl()获取当前环境地址,再传给 Scribe 或 swagger 的生成器 - 这样既避免重复配置,又让文档生成与实际请求行为一致——比如测试环境走代理、生产环境走 CDN,文档示例也同步体现
CI/CD 中安全注入 BaseURL 而不泄露密钥
文档生成通常在 CI 流程中执行,此时不能依赖本地 .env,而应通过 CI 环境变量注入:
- GitHub Actions 示例:
API_BASE_URL: ${{ secrets.API_BASE_URL_STAGING }},并在 run 步骤中显式导出:echo "API_BASE_URL=${{ secrets.API_BASE_URL_STAGING }}" >> $GITHUB_ENV - 执行生成命令前,先清空配置缓存:
php artisan config:clear,再以目标环境运行:APP_ENV=staging php artisan scribe:generate - 切勿在
config/scribe.php中写env('APP_URL') . '/api'这类拼接逻辑——如果APP_URL是http://localhost,线上文档也会显示 http 示例,引发安全或调试问题
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











