Article image
Renato Moreira
Renato Moreira05/03/2024 12:19
Share

FastAPI e HTMX: uma abordagem moderna para Full Stack

  • #Python

Os benefícios do FastAPI

FastAPI é uma estrutura web moderna e rápida (de alto desempenho) para construir APIs com Python 3.7+ com base em dicas de tipo Python padrão. Aqui estão alguns de seus principais benefícios:

Desempenho : FastAPI é construído em Starlette e Pydantic, tornando-o tão rápido quanto NodeJS e Go (graças a Starlette) e um dos frameworks mais rápidos para Python.

Facilidade de uso : oferece uma API intuitiva que o torna fácil de usar, mas poderoso. Você pode esperar uma aceleração significativa no desenvolvimento devido à sua simplicidade.

Documentação automática : com FastAPI, a documentação da sua API é gerada automaticamente usando Swagger UI e ReDoc, tornando mais fácil para os desenvolvedores entenderem e usarem sua API.

Segurança de tipo : aproveitando as dicas de tipo do Python, o FastAPI ajuda a detectar erros no início do desenvolvimento, levando a um código mais robusto e livre de erros.

Os benefícios do HTMX

HTMX é uma biblioteca JavaScript que permite acessar AJAX, transições CSS, WebSockets e eventos enviados pelo servidor diretamente em HTML, tornando-a uma ferramenta poderosa para aprimorar páginas da web com conteúdo dinâmico sem escrever JavaScript complexo. Seus benefícios incluem:

Simplicidade : você pode adicionar comportamento dinâmico às suas páginas web usando atributos diretamente no seu HTML, facilitando a leitura e a manutenção.

Aprimoramento progressivo : o HTMX funciona como um aprimoramento nas páginas renderizadas pelo servidor existentes, permitindo que você aprimore progressivamente a interatividade do seu aplicativo da web.

Não há necessidade de estruturas JavaScript complexas : com HTMX, você pode criar aplicativos da Web altamente interativos sem depender de estruturas JavaScript pesadas, levando a tempos de carregamento mais rápidos e desempenho aprimorado.

Construindo um aplicativo Full Stack com FastAPI e HTMX

Agora que entendemos os benefícios, vamos nos aprofundar na criação de um aplicativo simples que lista itens e permite aos usuários adicionar novos itens à lista de forma dinâmica.

Etapa 1: configure seu projeto

Primeiro, crie um novo diretório de projeto e configure um ambiente virtual:

mkdir fastapi-htmx-demo
cd fastapi-htmx-demo
python3 -m venv venv
source venv/bin/activate

Instale FastAPI, Uvicorn (um servidor ASGI) e Jinja2 para modelagem:

pip install fastapi uvicorn jinja2 python-multipart

Etapa 2: crie seu aplicativo FastAPI

Crie um arquivo chamado main.pye configure seu aplicativo FastAPI e rotas:

from fastapi import FastAPI, Request, Form
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates

app = FastAPI()
templates = Jinja2Templates(directory="templates")

# Armazenamento de dados
items = ["Item 1", "Item 2"]

@app.get("/", response_class=HTMLResponse)
def get_items(request: Request):
return templates.TemplateResponse("items.html", {"request": request, "items": items})

@app.post("/add-item")
def add_item(request: Request, item: str = Form(...)):
items.append(item)
return templates.TemplateResponse("partials/item.html", {"request": request, "item": item})

Etapa 3: configurar modelos Jinja2

Crie um templatesdiretório e adicione um items.htmlarquivo:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>FastAPI + HTMX Demo</title>
  <script src="https://unpkg.com/htmx.org"></script>
</head>
<body>
  <h1>Item List</h1>
  <ul id="item-list">
      {% for item in items %}
      <li>{{ item }}</li>
      {% endfor %}
  </ul>
  <form hx-post="/add-item" hx-target="#item-list" hx-swap="beforeend" hx-include="#item-input">
      <input type="text" id="item-input" name="item" required>
      <button type="submit">Add Item</button>
  </form>
</body>
</html>

Em seguida, crie um modelo parcial chamado item.html. Isso será usado para renderizar novos itens no servidor FastAPI à medida que são adicionados por meio da chamada HTMX POST no navegador.

<li>{{ item }}</li>

Etapa 4: execute seu aplicativo

Execute seu aplicativo usando Uvicorn:

uvicorn main:app --reload

Visite http://127.0.0.1:8000em seu navegador para ver seu aplicativo em ação.

Se você estiver interessado em ver todo o código em um só lugar, confira aqui: https://github.com/jaydev/fastapi-htmx-demo

Conclusão

FastAPI fornece um backend robusto, oferecendo alto desempenho e facilidade de desenvolvimento, enquanto HTMX permite interações dinâmicas de frontend com esforço mínimo. Essa pilha de tecnologia tem uma curva de aprendizado fácil e é útil em uma ampla variedade de situações.

Sei que buscarei essa combinação no futuro, à medida que criar aplicativos. Deixe-me saber qual é o seu par de back-end HTMX favorito nos comentários!

Share
Comments (0)