You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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"
}