OpenAPI condicional¶
Se necessário, você pode usar configurações e variáveis de ambiente para configurar o OpenAPI condicionalmente, dependendo do ambiente, e até mesmo desativá-lo completamente.
Sobre segurança, APIs e documentos¶
Ocultar suas interfaces de usuário de documentação na produção não deveria ser a maneira de proteger sua API.
Isso não adiciona nenhuma segurança extra à sua API; as operações de rotas ainda estarão disponíveis onde estão.
Se houver uma falha de segurança no seu código, ela ainda existirá.
Ocultar a documentação apenas torna mais difícil entender como interagir com sua API e pode dificultar sua depuração na produção. Pode ser considerado simplesmente uma forma de Segurança através da obscuridade.
Se você quiser proteger sua API, há várias coisas melhores que você pode fazer, por exemplo:
- Certifique-se de ter modelos Pydantic bem definidos para seus corpos de solicitação e respostas.
- Configure quaisquer permissões e funções necessárias usando dependências.
- Nunca armazene senhas em texto simples, apenas hashes de senha.
- Implemente e use ferramentas criptográficas bem conhecidas, como tokens JWT e Passlib, etc.
- Adicione controles de permissão mais granulares com escopos OAuth2 quando necessário.
- ...etc.
No entanto, você pode ter um caso de uso muito específico em que realmente precisa desabilitar a documentação da API para algum ambiente (por exemplo, para produção) ou dependendo de configurações de variáveis de ambiente.
OpenAPI condicional com configurações e variáveis de ambiente¶
Você pode usar facilmente as mesmas configurações do Pydantic para configurar sua OpenAPI gerada e as interfaces de usuário de documentos.
Por exemplo:
from fastapi import FastAPI
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
openapi_url: str = "/openapi.json"
settings = Settings()
app = FastAPI(openapi_url=settings.openapi_url)
@app.get("/")
def root():
return {"message": "Hello World"}
Aqui declaramos a configuração openapi_url
com o mesmo padrão de "/openapi.json"
.
E então o usamos ao criar o aplicativo FastAPI
.
Então você pode desabilitar o OpenAPI (incluindo os documentos da interface do usuário) definindo a variável de ambiente OPENAPI_URL
como uma string vazia, como:
$ 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)
Então, se você acessar as URLs em /openapi.json
, /docs
ou /redoc
, você receberá apenas um erro 404 Não Encontrado
como:
{
"detail": "Not Found"
}