Pular para o conteúdo

    Capítulo 1, Básico

    O que é uma API e por que FastAPI

    Uma API é um contrato entre quem pede e quem responde. O FastAPI transforma esse contrato, escrito como tipos Python, em validação, conversão e documentação automáticas.

    O que é uma API

    Quando um aplicativo mostra a sua lista de pedidos, ele não tem os pedidos. Ele pergunta a um servidor, que consulta um banco de dados e responde. Essa pergunta e essa resposta seguem um contrato: qual endereço chamar, com qual verbo, com quais dados, e o que volta. Esse contrato é a API (Application Programming Interface).

    Quase toda API da web fala HTTP. Uma requisição tem um verbo, um caminho, cabeçalhos e, às vezes, um corpo. A resposta tem um código de status, cabeçalhos e, em geral, um corpo em JSON:

    Uma requisição e a sua resposta
    POST /produtos HTTP/1.1
    Host: api.exemplo.com
    Content-Type: application/json
    
    {"nome": "Caneta", "preco": 3.5}
    
    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {"id": 7, "nome": "Caneta", "preco": 3.5}
    

    Os quatro verbos que formam o CRUD são a base de quase tudo que você vai construir:

    OperaçãoVerbo HTTPPara que serveSucesso típico
    CreatePOSTCriar um recurso novo201 Created
    ReadGETLer, sem alterar nada200 OK
    UpdatePUT ou PATCHSubstituir ou alterar parte de um recurso200 OK
    DeleteDELETERemover um recurso204 No Content

    O que é o FastAPI

    O FastAPI é um framework web para Python. Ele é construído sobre duas bibliotecas: o Starlette, que cuida de HTTP, rotas e middleware, e o Pydantic, que cuida de validar e converter dados. A ideia central dele é que a anotação de tipo é a fonte da verdade: você escreve idade: int uma vez, e o FastAPI usa isso para converter a entrada, recusar o que for inválido e descrever o parâmetro na documentação.

    basico/cap01_introducao.pylinhas 10 a 23
    from fastapi import FastAPI
    
    app = FastAPI(title="Loja", version="1.0")
    
    
    @app.get("/produtos")
    def listar_produtos():
        return ["caneta", "caderno"]
    
    
    documento = app.openapi()
    print(documento["openapi"])
    print(list(documento["paths"]))
    print(documento["info"]["title"], documento["info"]["version"])
    
    Saída
    3.1.0
    ['/produtos']
    Loja 1.0
    

    O app.openapi() devolve a descrição completa da API no formato OpenAPI, um padrão da indústria. Nós não escrevemos nada disso: o FastAPI a montou a partir da rota e dos tipos. É esse documento que alimenta a página /docs (Swagger UI) e a /redoc, e que outras ferramentas usam para gerar clientes e testes.

    FastAPI, Django e Flask

    Os três resolvem problemas diferentes, e escolher entre eles não é uma questão de "qual é mais rápido":

    FastAPIDjangoFlask
    FocoAPIs, com dados validados por tiposAplicações completas (admin, ORM, autenticação, templates)Aplicações pequenas e flexíveis
    Validação de entradaAutomática, pelos tiposFormulários e serializers (Django REST Framework)Manual ou por extensões
    Documentação interativaAutomática (OpenAPI)Por extensõesPor extensões
    Código assíncronoNativo (async def)Suportado em views e no ASGISuportado em views, com limitações

    Um erro comum de materiais antigos é dizer que Django e Flask "não têm suporte a async". Hoje ambos têm algum, em graus diferentes. O que o FastAPI oferece é uma forma de escrever o código assíncrono desde o início e a validação integrada. Para um sistema grande com painel administrativo e muitas telas, o Django continua sendo uma ótima escolha. Para uma API que serve um aplicativo ou outros serviços, o FastAPI costuma ser o caminho mais curto.

    Os dois recursos que mais pesam

    Validação automática. Se o cliente mandar um texto onde você pediu um número, o FastAPI responde com um erro 422 explicando qual campo falhou. Você não escreve nenhum if.

    Documentação automática. Ao abrir /docs, você vê todas as rotas, os campos de cada uma e um botão para testar a rota ali mesmo. Durante o desenvolvimento, isso substitui o Postman na maior parte do tempo.

    Documentação não é só para você

    O documento OpenAPI é lido por máquinas. Times de frontend geram clientes tipados a partir dele, e ferramentas de teste geram casos de teste. Quanto mais fiel for a sua anotação de tipo, mais útil ele é.

    Exercício 1

    Qual verbo, qual status?

    Escreva verbo_e_status(acao), que receba "criar", "ler", "atualizar" ou "remover" e devolva o par (verbo, status de sucesso típico) da tabela acima. Para "atualizar", use PUT.