"_Nós adotamos a biblioteca **FastAPI** para iniciar um servidor **REST** que pode ser consultado para obter **previsões**. [para o Ludwig]_"
<divstyle="text-align: right; margin-right: 10%;">Piero Molino, Yaroslav Dudin, e Sai Sumanth Miryala - <strong>Uber</strong><ahref="https://eng.uber.com/ludwig-v0-2/"target="_blank"><small>(ref)</small></a></div>
---
"_A **Netflix** tem o prazer de anunciar o lançamento open-source do nosso framework de orquestração de **gerenciamento de crises**: **Dispatch**! [criado com **FastAPI**]_"
"*Nós adotamos a biblioteca **FastAPI** para criar um servidor **REST** que possa ser chamado para obter **predições**. [para o Ludwig]*"
"_Se alguém estiver procurando construir uma API Python para produção, eu recomendaria fortemente o **FastAPI**. Ele é **lindamente projetado**, **simples de usar** e **altamente escalável**. Ele se tornou um **componente chave** para a nossa estratégia API first de desenvolvimento e está impulsionando diversas automações e serviços, como o nosso Virtual TAC Engineer._"
<divstyle="text-align: right; margin-right: 10%;">Piero Molino, Yaroslav Dudin e Sai Sumanth Miryala - <strong>Uber</strong><ahref="https://eng.uber.com/ludwig-v0-2/"target="_blank"><small>(ref)</small></a></div>
@ -113,28 +128,20 @@ FastAPI está nos ombros de gigantes:
## Instalação
<divclass="termy">
```console
$ pip install fastapi
---> 100%
```
</div>
Você também precisará de um servidor ASGI para produção, tal como <ahref="https://www.uvicorn.org"class="external-link"target="_blank">Uvicorn</a> ou <ahref="https://github.com/pgjones/hypercorn"class="external-link"target="_blank">Hypercorn</a>.
Crie e ative um <ahref="https://fastapi.tiangolo.com/pt/virtual-environments/"class="external-link"target="_blank">ambiente virtual</a>, e então instale o FastAPI:
<divclass="termy">
```console
$ pip install "uvicorn[standard]"
$ pip install "fastapi[standard]"
---> 100%
```
</div>
**Nota**: Certifique-se de que você colocou `"fastapi[standard]"` com aspas, para garantir que funcione em todos os terminais.
Se você não sabe, verifique a seção _"In a hurry?"_ sobre <ahref="https://fastapi.tiangolo.com/async/#in-a-hurry"target="_blank">`async` e `await` nas docs</a>.
Se você não sabe, verifique a seção _"Com pressa?"_ sobre <ahref="https://fastapi.tiangolo.com/pt/async/#com-pressa"target="_blank">`async` e `await` nas docs</a>.
</details>
@ -195,11 +202,24 @@ Rode o servidor com:
<divclass="termy">
```console
$ uvicorn main:app --reload
$ fastapi dev main.py
╭────────── FastAPI CLI - Development mode ───────────╮
│ │
│ Serving at: http://127.0.0.1:8000 │
│ │
│ API docs: http://127.0.0.1:8000/docs │
│ │
│ Running in development mode, for production use: │
<summary>Sobre o comando <code>uvicorn main:app --reload</code>...</summary>
<summary>Sobre o comando <code>fastapi dev main.py</code>...</summary>
O comando `uvicorn main:app` se refere a:
O comando `fastapi dev` lê o seu arquivo `main.py`, identifica o aplicativo **FastAPI** nele, e inicia um servidor usando o <ahref="https://www.uvicorn.org"class="external-link"target="_blank">Uvicorn</a>.
* `main`: o arquivo `main.py` (o "módulo" Python).
* `app`: o objeto criado dentro de `main.py` com a linha `app = FastAPI()`.
* `--reload`: faz o servidor recarregar após mudanças de código. Somente faça isso para desenvolvimento.
Por padrão, o `fastapi dev` iniciará com *auto-reload* habilitado para desenvolvimento local.
Você pode ler mais sobre isso na <ahref="https://fastapi.tiangolo.com/pt/fastapi-cli/"target="_blank">documentação do FastAPI CLI</a>.
Para um exemplo mais completo incluindo mais recursos, veja <ahref="https://fastapi.tiangolo.com/tutorial/">Tutorial - Guia do Usuário</a>.
Para um exemplo mais completo incluindo mais recursos, veja <ahref="https://fastapi.tiangolo.com/pt/tutorial/">Tutorial - Guia do Usuário</a>.
**Alerta de Spoiler**: o tutorial - guia do usuário inclui:
@ -416,9 +436,9 @@ Para um exemplo mais completo incluindo mais recursos, veja <a href="https://fas
* Um poderoso e fácil de usar sistema de **<abbrtitle="também conhecido como componentes, recursos, fornecedores, serviços, injetáveis">Injeção de Dependência</abbr>**.
* Segurança e autenticação, incluindo suporte para **OAuth2** com autenticação **JWT tokens** e **HTTP Basic**.
* Técnicas mais avançadas (mas igualmente fáceis) para declaração de **modelos JSON profundamente aninhados** (graças ao Pydantic).
* Integrações **GraphQL** com o <ahref="https://strawberry.rocks"class="external-link"target="_blank">Strawberry</a> e outras bibliotecas.
* Muitos recursos extras (graças ao Starlette) como:
* **WebSockets**
* **GraphQL**
* testes extrememamente fáceis baseados em HTTPX e `pytest`
* **CORS**
* **Cookie Sessions**
@ -428,30 +448,49 @@ Para um exemplo mais completo incluindo mais recursos, veja <a href="https://fas
Testes de performance da _Independent TechEmpower_ mostram aplicações **FastAPI** rodando sob Uvicorn como <ahref="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7"class="external-link"target="_blank">um dos _frameworks_ Python mais rápidos disponíveis</a>, somente atrás de Starlette e Uvicorn (utilizados internamente pelo FastAPI). (*)
Para entender mais sobre performance, veja a seção <ahref="https://fastapi.tiangolo.com/benchmarks/"class="internal-link"target="_blank">Benchmarks</a>.
Para entender mais sobre performance, veja a seção <ahref="https://fastapi.tiangolo.com/pt/benchmarks/"class="internal-link"target="_blank">Comparações</a>.
## Dependências
O FastAPI depende do Pydantic e do Starlette.
## Dependências opcionais
### Dependências `standard`
Usados por Pydantic:
Quando você instala o FastAPI com `pip install "fastapi[standard]"`, ele vêm com o grupo `standard` (padrão) de dependências opcionais:
Utilizado pelo Pydantic:
* <ahref="https://github.com/JoshData/python-email-validator"target="_blank"><code>email-validator</code></a> - para validação de email.
Usados por Starlette:
Utilizado pelo Starlette:
* <ahref="https://www.python-httpx.org"target="_blank"><code>httpx</code></a> - Obrigatório caso você queira utilizar o `TestClient`.
* <ahref="https://jinja.palletsprojects.com"target="_blank"><code>jinja2</code></a> - Obrigatório se você quer utilizar a configuração padrão de templates.
* <ahref="https://github.com/Kludex/python-multipart"target="_blank"><code>python-multipart</code></a> - Obrigatório se você deseja suporte a <abbrtitle="converting the string that comes from an HTTP request into Python data">"parsing"</abbr> de formulário, com `request.form()`.
Utilizado pelo FastAPI / Starlette:
* <ahref="https://www.uvicorn.org"target="_blank"><code>uvicorn</code></a> - para o servidor que carrega e serve a sua aplicação. Isto inclui `uvicorn[standard]`, que inclui algumas dependências (e.g. `uvloop`) necessárias para servir em alta performance.
* `fastapi-cli` - que disponibiliza o comando `fastapi`.
### Sem as dependências `standard`
Se você não deseja incluir as dependências opcionais `standard`, você pode instalar utilizando `pip install fastapi` ao invés de `pip install "fastapi[standard]"`.
### Dpendências opcionais adicionais
Existem algumas dependências adicionais que você pode querer instalar.
* <ahref="https://www.python-httpx.org"target="_blank"><code>httpx</code></a> - Necessário se você quiser utilizar o `TestClient`.
* <ahref="https://jinja.palletsprojects.com"target="_blank"><code>jinja2</code></a> - Necessário se você quiser utilizar a configuração padrão de templates.
* <ahref="https://github.com/Kludex/python-multipart"target="_blank"><code>python-multipart</code></a> - Necessário se você quiser suporte com <abbrtitle="converte uma string que chega de uma requisição HTTP para dados Python">"parsing"</abbr> de formulário, com `request.form()`.
* <ahref="https://pythonhosted.org/itsdangerous/"target="_blank"><code>itsdangerous</code></a> - Necessário para suporte a `SessionMiddleware`.
* <ahref="https://pyyaml.org/wiki/PyYAMLDocumentation"target="_blank"><code>pyyaml</code></a> - Necessário para suporte a `SchemaGenerator` da Starlette (você provavelmente não precisará disso com o FastAPI).
* <ahref="https://graphene-python.org/"target="_blank"><code>graphene</code></a> - Necessário para suporte a `GraphQLApp`.
Dependências opcionais adicionais do Pydantic:
Usados por FastAPI / Starlette:
* <ahref="https://docs.pydantic.dev/latest/usage/pydantic_settings/"target="_blank"><code>pydantic-settings</code></a> - para gerenciamento de configurações.
* <ahref="https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/"target="_blank"><code>pydantic-extra-types</code></a> - tipos extras para serem utilizados com o Pydantic.
* <ahref="https://www.uvicorn.org"target="_blank"><code>uvicorn</code></a> - para o servidor que carrega e serve sua aplicação.
* <ahref="https://github.com/ijl/orjson"target="_blank"><code>orjson</code></a> - Necessário se você quer utilizar `ORJSONResponse`.
* <ahref="https://github.com/esnme/ultrajson"target="_blank"><code>ujson</code></a> - Necessário se você quer utilizar `UJSONResponse`.
Dependências opcionais adicionais do FastAPI:
Você pode instalar todas essas dependências com `pip install fastapi[all]`.
* <ahref="https://github.com/ijl/orjson"target="_blank"><code>orjson</code></a> - Obrigatório se você deseja utilizar o `ORJSONResponse`.
* <ahref="https://github.com/esnme/ultrajson"target="_blank"><code>ujson</code></a> - Obrigatório se você deseja utilizar o `UJSONResponse`.