1# Extendendo o OpenAPI { #extending-openapi }23Existem alguns casos em que pode ser necessário modificar o esquema OpenAPI gerado.45Nesta seção, você verá como fazer isso.67## O processo normal { #the-normal-process }89O processo normal (padrão) é o seguinte.1011Uma aplicação (instância) do `FastAPI` possui um método `.openapi()` que deve retornar o esquema OpenAPI.1213Como parte da criação do objeto de aplicação, uma *operação de rota* para `/openapi.json` (ou para o que você definir como `openapi_url`) é registrada.1415Ela apenas retorna uma resposta JSON com o resultado do método `.openapi()` da aplicação.1617Por padrão, o que o método `.openapi()` faz é verificar se a propriedade `.openapi_schema` tem conteúdo e retorná-lo.1819Se não tiver, ele gera o conteúdo usando a função utilitária em `fastapi.openapi.utils.get_openapi`.2021E essa função `get_openapi()` recebe como parâmetros:2223* `title`: O título do OpenAPI, exibido na documentação.24* `version`: A versão da sua API, por exemplo, `2.5.0`.25* `openapi_version`: A versão da especificação OpenAPI utilizada. Por padrão, a mais recente: `3.1.0`.26* `summary`: Um resumo curto da API.27* `description`: A descrição da sua API, que pode incluir markdown e será exibida na documentação.28* `routes`: As rotas da aplicação, obtidas de `app.routes`. O FastAPI as usa para coletar as *operações de rota* registradas, incluindo as dos routers incluídos.2930/// tip | Detalhes Técnicos3132`app.routes` é uma árvore de rotas de baixo nível. Ela pode incluir rotas candidatas que o FastAPI usa internamente para routers incluídos, não apenas objetos finais `APIRoute`.3334Você ainda pode passar `app.routes` para `get_openapi()`. O FastAPI vai percorrer essa árvore de rotas para coletar as operações de rota efetivas.3536///3738/// note | Nota3940O parâmetro `summary` está disponível no OpenAPI 3.1.0 e superior, suportado pelo FastAPI 0.99.0 e superior.4142///4344## Sobrescrevendo os padrões { #overriding-the-defaults }4546Com as informações acima, você pode usar a mesma função utilitária para gerar o esquema OpenAPI e sobrescrever cada parte que precisar.4748Por exemplo, vamos adicionar [Extensão OpenAPI do ReDoc para incluir um logo personalizado](https://github.com/Redocly/redoc/blob/main/docs/redoc-vendor-extensions.md#x-logo).4950### Normal **FastAPI** { #normal-fastapi }5152Primeiro, escreva toda a sua aplicação **FastAPI** normalmente:5354{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[1,4,7:9] *}5556### Gerar o esquema OpenAPI { #generate-the-openapi-schema }5758Em seguida, use a mesma função utilitária para gerar o esquema OpenAPI, dentro de uma função `custom_openapi()`:5960{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[2,15:21] *}6162### Modificar o esquema OpenAPI { #modify-the-openapi-schema }6364Agora, você pode adicionar a extensão do ReDoc, incluindo um `x-logo` personalizado ao "objeto" `info` no esquema OpenAPI:6566{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[22:24] *}6768### Armazenar em cache o esquema OpenAPI { #cache-the-openapi-schema }6970Você pode usar a propriedade `.openapi_schema` como um "cache" para armazenar o esquema gerado.7172Dessa forma, sua aplicação não precisará gerar o esquema toda vez que um usuário abrir a documentação da sua API.7374Ele será gerado apenas uma vez, e o mesmo esquema armazenado em cache será utilizado nas próximas requisições.7576{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[13:14,25:26] *}7778### Sobrescrever o método { #override-the-method }7980Agora, você pode substituir o método `.openapi()` pela sua nova função.8182{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[29] *}8384### Verifique { #check-it }8586Uma vez que você acessar [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc), verá que está usando seu logo personalizado (neste exemplo, o logo do **FastAPI**):8788<img src="/img/tutorial/extending-openapi/image01.png">
Findings
✓ No findings reported for this file.