Voltar para projetos

Case de projeto

Library Studio

API assíncrona de catálogo de livros em FastAPI, com busca paginada, metadados por ISBN e uma interface web de demonstração.

Meu papelDesenvolvimento back-end
Tecnologias utilizadas
  • FastAPI
  • Python
  • SQLAlchemy
  • SQLite
  • Pydantic
  • Jinja2
  • pytest
Library Studio com os indicadores do acervo, a busca e os filtros de livros.
library-api-advanced.vercel.app / Página inicial

Problema

Cadastrar livros à mão exige redigitar metadados que já existem em bases públicas, e uma API de escrita aberta na internet vira alvo de abuso.

Solução

Arquitetura resumida
  • Livros cadastrados na própria API, com seed de 14 livros reais na demo.
  • Metadados da OpenLibrary consultados pelo ISBN, com cache de 24 h.
Documentação OpenAPI com os endpoints de livros e de saúde.
Documentação OpenAPI com os endpoints de livros e de saúde.
Decisões técnicas
  1. Camadas API, Service e Repository sobre modelos SQLAlchemy assíncronos, com DTOs em Pydantic.
  2. Busca por título ou autor, ano e faixa de anos, com ordenação, paginação e o total no cabeçalho X-Total-Count.
  3. Lookup de ISBN na OpenLibrary com timeout de 5 s e validação do dígito verificador antes da consulta.

Resultado

Funções de teste em pytest
41
Repositório privado / contagem estática em tests/ / commit 0199d76
Livros na seed da demo
14
Demo publicada / X-Total-Count de GET /api/v1/books/ / 13 out. 2026

O projeto mostra uma API de base pequena, com proteções reais para ficar aberta na internet.

  • API REST assíncrona em camadas
  • Validação de entrada
  • Proteções contra abuso
  • Testes com serviço externo simulado

Aprendizados e limitações

  • Na demo o banco é SQLite em /tmp: volta à seed a cada cold start e pode divergir entre instâncias.
  • Não há autenticação; a escrita fica protegida por rate limit e pela chave que a desliga.
  • Não há fluxo de empréstimo nem migrações versionadas.

Mais sobre o projeto

Detalhes completos do case, colapsados para leitura opcional.

Descrição completa

Library Studio é uma API assíncrona de catálogo de livros em FastAPI, com interface web servida pela própria aplicação.

A busca combina título ou autor, ano e faixa de anos, ordena, pagina e devolve o total no cabeçalho X-Total-Count.

O cadastro valida o ISBN e completa os metadados pela OpenLibrary, com timeout de 5 s e cache de 24 h.

Para ficar aberta na internet, a API limita escrita por IP, corpo de requisição e tamanho do acervo, e pode desligar a escrita.

FastAPI com SQLAlchemy assíncrono e SQLite, Pydantic, Jinja2 para a interface e pytest com a OpenLibrary simulada.

Funcionalidades e destaques
  • CRUD completo de livros.
  • Busca paginada com ordenação e filtros por ano.
  • Preenchimento de metadados pelo ISBN.
  • Documentação OpenAPI em /docs e /redoc.
  • Interface web com indicadores do acervo.
  • Valida o ISBN pelo dígito verificador antes de chamar a OpenLibrary, com timeout de 5 s e cache de 24 h.
  • Limita escrita por IP em janela deslizante, com corpo de até 16 KB e uma chave que desliga a escrita.
  • Devolve X-Request-Id e X-Process-Time em toda resposta e o total paginado em X-Total-Count.
Arquitetura técnica e dados
  • Rate limit por IP em janela deslizante, limite de 16 KB no corpo e chave para desligar a escrita.
  • CSP separada para a aplicação e para a documentação OpenAPI.

Arquitetura técnica

Como o case foi pensado como produto

API assíncrona de catálogo de livros em FastAPI, com busca paginada, metadados por ISBN e uma interface web de demonstração.

FastAPIFrameworkPythonLinguagemSQLAlchemyBanco de DadosSQLiteBanco de DadosPydanticFrameworkJinja2FrameworkpytestFramework

Dados utilizados

  • Livros cadastrados na própria API, com seed de 14 livros reais na demo.
  • Metadados da OpenLibrary consultados pelo ISBN, com cache de 24 h.

Principais componentes

  • CRUD completo de livros.
  • Busca paginada com ordenação e filtros por ano.
  • Preenchimento de metadados pelo ISBN.
  • Documentação OpenAPI em /docs e /redoc.
  • Interface web com indicadores do acervo.

Decisões técnicas

  • API REST assíncrona em camadas
  • Validação de entrada
  • Proteções contra abuso
  • Testes com serviço externo simulado

Trade-offs

  • Na demo o banco é SQLite em /tmp: volta à seed a cada cold start e pode divergir entre instâncias.
  • Não há autenticação; a escrita fica protegida por rate limit e pela chave que a desliga.
  • Não há fluxo de empréstimo nem migrações versionadas.
Como executar
  1. O repositório é privado; os passos abaixo valem para quem tem acesso.
  2. python -m venv .venv e ative o ambiente.
  3. pip install -r requirements.txt
  4. uvicorn app.main:app --reload
  5. pytest
Créditos

Desenvolvido por Matheus Siqueira - https://www.matheusdev.tech

Próximo projetoGestor de Notas

Aplicativo de notas que salva no navegador, sem conta, com edição na própria lista e migração versionada dos dados.

Ver case completo