Ir para o conte√ļdo

Recursos

Recursos do FastAPI

FastAPI te oferece o seguinte:

Baseado em padr√Ķes abertos

  • OpenAPI para cria√ß√£o de APIs, incluindo declara√ß√Ķes de opera√ß√Ķes de caminho, par√Ęmetros, requisi√ß√Ķes de corpo, seguran√ßa etc.
  • Modelo de documenta√ß√£o autom√°tica com JSON Schema (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 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.

  • Swagger UI, com navega√ß√£o interativa, chame e teste sua API diretamente do navegador.

Interação Swagger UI

  • Documenta√ß√£o alternativa da API com ReDoc.

ReDoc

Apenas Python moderno

Tudo √© baseado no padr√£o das declara√ß√Ķes de tipos do Python 3.6 (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.

Você escreve Python padrão com tipos:

from datetime import date

from pydantic import BaseModel

# Declare uma vari√°vel como str
# e obtenha suporte do editor dentro da função
def main(user_id: str):
    return user_id


# Um modelo do Pydantic
class User(BaseModel):
    id: int
    name: str
    joined: date

Que ent√£o pode ser usado como:

my_user: User = User(id=3, name="John Doe", joined="2018-07-19")

second_user_data = {
    "id": 4,
    "name": "Mary",
    "joined": "2018-11-30",
}

my_second_user: User = User(**second_user_data)

Info

**second_user_data quer dizer:

Passe as chaves e valores do dicion√°rio second_user_data diretamente como argumentos chave-valor, equivalente a: User(id=4, name="Mary", joined="2018-11-30")

Suporte de editores

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 que o recurso mais utilizado √© o "auto completar".

Todo o framework FastAPI é feito para satisfazer isso. Auto completação funciona em todos os lugares.

Você raramente precisará voltar à documentação.

Aqui est√° como o editor poder√° te ajudar:

editor support

editor support

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.

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.

Breve

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 para a maioria dos (ou todos?) tipos de dados do Python, incluindo:

    • objetos JSON (dict).
    • arrays JSON (list), definindo tipos dos itens.
    • campos String (str), definindo tamanho m√≠nimo e m√°ximo.
    • Numbers (int, float) com valores m√≠nimos e m√°ximos, etc.
  • Valida√ß√£o de tipos mais ex√≥ticos, como:

    • URL.
    • Email.
    • UUID.
    • ...e outros.

Toda a validação é controlada pelo robusto e bem estabelecido Pydantic.

Segurança e autenticação

Segurança e autenticação integradas. Sem nenhum compromisso com bancos de dados ou modelos de dados.

Todos os esquemas de seguranças definidos no OpenAPI, incluindo:

  • HTTP Basic.
  • OAuth2 (tamb√©m com tokens JWT). Confira o tutorial em OAuth2 com JWT.
  • Chaves de API em:
    • Headers.
    • par√Ęmetros da Query.
    • Cookies etc.

Além disso, todos os recursos de seguranças 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

FastAPI inclui um sistema de injeção de dependência 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.
  • 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.

"Plug-ins" ilimitados

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

  • 100% de cobertura de testes.
  • 100% do c√≥digo utiliza type annotations.
  • Usado para aplica√ß√Ķes em produ√ß√£o.

Recursos do Starlette

FastAPI é totalmente compatível com (e baseado no) Starlette. Então, qualquer código adicional Starlette que você tiver, também funcionará.

FastAPI é na verdade uma sub-classe do Starlette. Então, se você já conhece ou usa Starlette, a maioria das funcionalidades se comportará da mesma forma.

Com FastAPI, você terá todos os recursos do Starlette (já que FastAPI é apenas um Starlette com esteróides):

  • Desempenho realmente impressionante. √Č um dos frameworks Python dispon√≠veis mais r√°pidos, a par com o NodeJS e Go.
  • Suporte a WebSocket.
  • Suporte a GraphQL.
  • Tarefas em processo background.
  • Eventos na inicializa√ß√£o e encerramento.
  • Cliente de testes constru√≠do sobre requests.
  • Respostas em CORS, GZip, Static Files, Streaming.
  • Suporte a Session e Cookie.
  • 100% de cobertura de testes.
  • 100% do c√≥digo utilizando type annotations.

Recursos do Pydantic

FastAPI é totalmente compatível com (e baseado no) Pydantic. Então, qualquer código Pydantic adicional que você tiver, também funcionará.

Incluindo bibliotecas externas também baseadas no Pydantic, como ORMs e ODMs para bancos de dados.

Isso também significa que em muitos casos você poderá passar o mesmo objeto que você receber de uma requisição diretamente para o banco de dados, já que tudo é validado automaticamente.

O mesmo se aplica no sentido inverso, em muitos casos você poderá simplesmente passar o objeto que você recebeu do banco de dados diretamente para o cliente.

Com FastAPI você terá todos os recursos do Pydantic (já que FastAPI utiliza o Pydantic para todo o controle dos dados):

  • Sem pegadinhas:
    • 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 IDE/linter/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.
  • R√°pido:
    • em benchmarks, o Pydantic √© mais r√°pido que todas as outras bibliotecas testadas.
  • 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.
    • Voc√™ pode ter JSONs aninhados profundamente e t√™-los todos validados e anotados.
  • Extens√≠vel:
    • Pydantic permite que tipos de dados personalizados sejam definidos ou voc√™ pode estender a valida√ß√£o com m√©todos em um modelo decorado com seu decorador de validador.
  • 100% de cobertura de testes.