4.0 KiB
Условный OpenAPI
Если это необходимо, вы можете использовать настройки и переменные окружения для условной конфигурации OpenAPI в зависимости от среды и даже полностью его отключить.
О безопасности, API и документации
Сокрытие пользовательских интерфейсов вашей документации в продакшене не должно быть способом защиты вашего API.
Это не добавляет никакой дополнительной безопасности вашему API, операции с путями по-прежнему будут доступны там, где они находятся.
Если в вашем коде есть уязвимость, она все равно будет существовать.
Сокрытие документации просто усложняет понимание того, как взаимодействовать с вашим API, и может усложнить отладку в продакшене. Это можно считать просто формой безопасности через неясность.
Если вы хотите обезопасить ваш API, есть несколько более эффективных методов, например:
- Убедитесь, что у вас есть правильно определенные Pydantic модели для тел запросов и ответов.
- Настройте необходимые разрешения и роли с помощью зависимостей.
- Никогда не храните пароли в открытом виде, только хэши паролей.
- Реализуйте и используйте хорошо известные криптографические инструменты, такие как Passlib и JWT токены и т. д.
- Добавьте более гранулированное управление разрешениями с помощью OAuth2 скоупов там, где это необходимо.
- ...и так далее.
Тем не менее, у вас может быть очень специфичный случай, когда вам действительно нужно отключить документацию API для какой-то среды (например, для продакшена) или в зависимости от конфигураций из переменных окружения.
Условный OpenAPI из настроек и переменных окружения
Вы можете легко использовать те же настройки Pydantic для конфигурации вашего сгенерированного OpenAPI и пользовательских интерфейсов документации.
Например:
{* ../../docs_src/conditional_openapi/tutorial001.py hl[6,11] *}
Здесь мы объявляем настройку openapi_url
с тем же значением по умолчанию "/openapi.json"
.
Затем мы используем её при создании приложения FastAPI
.
Затем вы можете отключить OpenAPI (включая UI документацию), установив переменную окружения OPENAPI_URL
в пустую строку, например:
$ OPENAPI_URL= uvicorn main:app
<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
Затем, если вы перейдете по URL на /openapi.json
, /docs
или /redoc
, вы получите ошибку 404 Not Found
, например:
{
"detail": "Not Found"
}