### Baseado em padrões abertos { #based-on-open-standards }
* <ahref="https://github.com/OAI/OpenAPI-Specification"class="external-link"target="_blank"><strong>OpenAPI</strong></a> para criação de APIs, incluindo declarações de <abbrtitle="também conhecido como métodos HTTP, como POST, GET, PUT, DELETE">operações</abbr>de <abbrtitle="também conhecido como: endpoints, routes">caminho</abbr>, parâmetros, requisições de corpo, segurança etc.
* <ahref="https://github.com/OAI/OpenAPI-Specification"class="external-link"target="_blank"><strong>OpenAPI</strong></a> para criação de APIs, incluindo declarações de <abbrtitle="também conhecido como: endpoints, routes">caminho</abbr><abbrtitle="também conhecido como métodos HTTP, como POST, GET, PUT, DELETE">operações</abbr>, parâmetros, requisições de corpo, segurança etc.
* Modelo de documentação automática com <ahref="https://json-schema.org/"class="external-link"target="_blank"><strong>JSON Schema</strong></a> (já que o OpenAPI em si é baseado no JSON Schema).
* Projetado em cima desses padrões após um estudo meticuloso, em vez de uma reflexão breve.
* Isso também permite o uso de **geração de código do cliente** automaticamente em muitas linguagens.
### Documentação automática
### Documentação automática { #automatic-docs }
Documentação interativa da API e navegação _web_ da interface de usuário. Como o _framework_ é baseado no OpenAPI, há várias opções, 2 incluídas por padrão.
Documentação interativa da API e navegação web da interface de usuário. Como o framework é baseado no OpenAPI, há várias opções, 2 incluídas por padrão.
* <ahref="https://github.com/swagger-api/swagger-ui"class="external-link"target="_blank"><strong>Swagger UI</strong></a>, com navegação interativa, chame e teste sua API diretamente do navegador.
@ -23,9 +23,9 @@ Documentação interativa da API e navegação _web_ da interface de usuário. C
Tudo é baseado no padrão das declarações de **tipos do Python 3.8** (graças ao Pydantic). Nenhuma sintaxe nova para aprender. Apenas o padrão moderno do Python.
Tudo é baseado no padrão das declarações de **tipos do Python** (graças ao Pydantic). Nenhuma sintaxe nova para aprender. Apenas o padrão moderno do Python.
Se você precisa refrescar a memória rapidamente sobre como usar tipos do Python (mesmo que você não use o FastAPI), confira esse rápido tutorial: [Tipos do Python](python-types.md){.internal-link target=_blank}.
@ -63,7 +63,7 @@ second_user_data = {
my_second_user: User = User(**second_user_data)
```
/// info
/// info | Informação
`**second_user_data` quer dizer:
@ -71,13 +71,13 @@ Passe as chaves e valores do dicionário `second_user_data` diretamente como arg
///
### Suporte de editores
### Suporte de editores { #editor-support }
Todo o _framework_ foi projetado para ser fácil e intuitivo de usar, todas as decisões foram testadas em vários editores antes do início do desenvolvimento, para garantir a melhor experiência de desenvolvimento.
Todo o framework foi projetado para ser fácil e intuitivo de usar, todas as decisões foram testadas em vários editores antes do início do desenvolvimento, para garantir a melhor experiência de desenvolvimento.
Na última pesquisa do desenvolvedor Python ficou claro <ahref="https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features"class="external-link"target="_blank">que o recurso mais utilizado é o "auto completar"</a>.
Na pesquisa de desenvolvedores Python, ficou claro <ahref="https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features"class="external-link"target="_blank">que um dos recursos mais utilizados é o "preenchimento automático"</a>.
Todo o _framework_**FastAPI** é feito para satisfazer isso. Auto completação funciona em todos os lugares.
Todo o framework **FastAPI** é feito para satisfazer isso. O preenchimento automático funciona em todos os lugares.
Você raramente precisará voltar à documentação.
@ -91,17 +91,17 @@ Aqui está como o editor poderá te ajudar:
Você terá completação do seu código que você poderia considerar impossível antes. Como por exemplo, a chave `price` dentro do corpo JSON (que poderia ter sido aninhado) que vem de uma requisição.
Você terá preenchimento automático no seu código que você poderia considerar impossível antes. Como por exemplo, a chave `price` dentro do corpo JSON (que poderia ter sido aninhado) que vem de uma requisição.
Sem a necessidade de digitar nomes de chaves erroneamente, ir e voltar entre documentações, ou rolar pela página para descobrir se você utilizou `username` or`user_name`.
Sem a necessidade de digitar nomes de chaves erroneamente, ir e voltar entre documentações, ou rolar pela página para descobrir se você utilizou `username` ou`user_name`.
### Breve
### Breve { #short }
Há **padrões** sensíveis para tudo, com configurações adicionais em todos os lugares. Todos os parâmetros podem ser regulados para fazer o que você precisa e para definir a API que você necessita.
Por padrão, tudo **"simplesmente funciona"**.
### Validação
### Validação { #validation }
* Validação para a maioria dos (ou todos?) **tipos de dados** do Python, incluindo:
* objetos JSON (`dict`).
@ -117,7 +117,7 @@ Por padrão, tudo **"simplesmente funciona"**.
Toda a validação é controlada pelo robusto e bem estabelecido **Pydantic**.
### Segurança e autenticação
### Segurança e autenticação { #security-and-authentication }
Segurança e autenticação integradas. Sem nenhum compromisso com bancos de dados ou modelos de dados.
@ -130,34 +130,34 @@ Todos os esquemas de seguranças definidos no OpenAPI, incluindo:
* parâmetros da Query.
* Cookies etc.
Além disso, todos os recursos de seguranças do Starlette (incluindo **cookies de sessão**).
Além disso, todos os recursos de segurança do Starlette (incluindo **cookies de sessão**).
Tudo construído como ferramentas e componentes reutilizáveis que são fáceis de integrar com seus sistemas, armazenamento de dados, banco de dados relacionais e não-relacionais etc.
### Injeção de dependência
### Injeção de dependência { #dependency-injection }
FastAPI inclui um sistema de <abbrtitle='também conhecido como "components", "resources", "services", "providers"'><strong>injeção de dependência</strong></abbr> extremamente fácil de usar, mas extremamente poderoso.
* Mesmo dependências podem ter dependências, criando uma hierarquia ou **"grafo" de dependências**.
* Tudo **automaticamente controlado** pelo _framework_.
* Tudo **automaticamente controlado** pelo framework.
* Todas as dependências podem pedir dados das requisições e **ampliar** as restrições e documentação automática da **operação de caminho**.
* **Validação automática** mesmo para parâmetros da *operação de caminho* definidos em dependências.
* Suporte para sistemas de autenticação complexos, **conexões com banco de dados** etc.
* **Sem comprometer** os bancos de dados, _frontends_ etc. Mas fácil integração com todos eles.
* **Sem comprometer** os bancos de dados, frontends etc. Mas fácil integração com todos eles.
### "Plug-ins" ilimitados
### "Plug-ins" ilimitados { #unlimited-plug-ins }
Ou, de outra forma, sem a necessidade deles, importe e use o código que precisar.
Qualquer integração é projetada para ser tão simples de usar (com dependências) que você pode criar um "plug-in" para suas aplicações com 2 linhas de código usando a mesma estrutura e sintaxe para as suas *operações de caminho*.
### Testado
### Testado { #tested }
* 100% <abbrtitle="A quantidade de código que é testada automaticamente">de cobertura de testes</abbr>.
* 100% do código utiliza<abbrtitle="Type annotations do Python, com isso seu editor e ferramentas externas podem te dar um suporte melhor">type annotations</abbr>.
* 100% do código com<abbrtitle="Anotações de tipo do Python, com isso seu editor e ferramentas externas podem te dar um suporte melhor">anotações de tipo</abbr>.
* Usado para aplicações em produção.
## Recursos do Starlette
## Recursos do Starlette { #starlette-features }
**FastAPI** é totalmente compatível com (e baseado no) <ahref="https://www.starlette.dev/"class="external-link"target="_blank"><strong>Starlette</strong></a>. Então, qualquer código adicional Starlette que você tiver, também funcionará.
@ -165,18 +165,17 @@ Qualquer integração é projetada para ser tão simples de usar (com dependênc
Com **FastAPI**, você terá todos os recursos do **Starlette** (já que FastAPI é apenas um Starlette com esteróides):
* Desempenho realmente impressionante. É <ahref="https://github.com/encode/starlette#performance"class="external-link"target="_blank">um dos _frameworks_ Python disponíveis mais rápidos, a par com o **NodeJS** e **Go**</a>.
* Desempenho realmente impressionante. É <ahref="https://github.com/encode/starlette#performance"class="external-link"target="_blank">um dos frameworks Python disponíveis mais rápidos, a par com o **NodeJS** e **Go**</a>.
* Suporte a **WebSocket**.
* Suporte a **GraphQL**.
* Tarefas em processo _background_.
* Tarefas em processo background.
* Eventos na inicialização e encerramento.
* Cliente de testes construído sobre HTTPX.
* Respostas em **CORS**, GZip, Static Files, Streaming.
* Suporte a **Session e Cookie**.
* 100% de cobertura de testes.
* 100% do código utilizando _type annotations_.
* 100% do código utilizando anotações de tipo.
## Recursos do Pydantic
## Recursos do Pydantic { #pydantic-features }
**FastAPI** é totalmente compatível com (e baseado no) <ahref="https://docs.pydantic.dev/"class="external-link"target="_blank"><strong>Pydantic</strong></a>. Então, qualquer código Pydantic adicional que você tiver, também funcionará.
@ -192,7 +191,7 @@ Com **FastAPI** você terá todos os recursos do **Pydantic** (já que FastAPI u
* Sem novas definições de esquema de micro-linguagem para aprender.
* Se você conhece os tipos do Python, você sabe como usar o Pydantic.
* Vai bem com o/a seu/sua **<abbrtitle="Ambiente de Desenvolvimento Integrado, similar a um editor de código">IDE</abbr>/<abbrtitle="Um programa que confere erros de código">linter</abbr>/cérebro**:
* Como as estruturas de dados do Pydantic são apenas instâncias de classes que você define, a auto completação, _linting_, _mypy_ e a sua intuição devem funcionar corretamente com seus dados validados.
* Como as estruturas de dados do Pydantic são apenas instâncias de classes que você define, o preenchimento automático, linting, mypy e a sua intuição devem funcionar corretamente com seus dados validados.
* Valida **estruturas complexas**:
* Use modelos hierárquicos do Pydantic, `List` e `Dict` do `typing` do Python, etc.
* Validadores permitem que esquemas de dados complexos sejam limpos e facilmente definidos, conferidos e documentados como JSON Schema.