Capítulo 6.4: Documentação da API
Tempo de estudo: 30 minutos
1. Por que a documentação da API é necessária?
Imagine que lhe deram um controle remoto de uma nave espacial complexa sem uma única etiqueta nos botões. Você os pressionaria aleatoriamente, arriscando lançar a catapulta em vez de ligar a luz. A documentação da API são essas mesmas etiquetas e instruções.
Boa documentação:
- Economiza tempo: Os desenvolvedores não precisam adivinhar quais endpoints existem, quais parâmetros eles aceitam e o que retornam.
- Reduz erros: Uma descrição clara dos formatos de dados e códigos de erro ajuda a evitar o uso incorreto da API.
- Simplifica a integração: A equipe de frontend pode trabalhar em paralelo com a equipe de backend, baseando-se na documentação como um contrato.
- É o seu legado: Daqui a seis meses, você mesmo se agradecerá quando voltar ao projeto.
💡 Analogia espacial:
- API = Sistema complexo de controle de uma estação espacial.
- Documentação da API = Manual para astronautas. Descreve:
- Qual comando (
endpoint
) enviar para abrir a eclusa.- Quais parâmetros (
corpo da requisição
) passar para configurar o sistema de suporte à vida.- Quais sinais (
respostas da API
) esperar em resposta.
2. Documentação no FastAPI: Magia Automática
FastAPI torna a documentação incrivelmente simples. Ele gera automaticamente documentação interativa com base no seu código, usando os padrões OpenAPI e Swagger UI.
Passo 1: Adicione metadados à sua aplicação
Em main.py
, você pode adicionar descrições que aparecerão na documentação.
# main.py
from fastapi import FastAPI
from pydantic import BaseModel, Field
# ... (código FastAPI)
app = FastAPI(
title="SpaceAPI",
description="""
API para exploração da galáxia. 🚀
Você poderá:
* **Visualizar planetas**.
* **Adicionar novos mundos** (autenticação necessária).
""",
version="1.0.0",
contact={
"name": "Engenheiro Chefe do Centro de Controle da Missão",
"url": "https://example.com/contact",
"email": "engineer@example.com",
},
)
Passo 2: Descreva seus modelos e endpoints
Quanto mais detalhadamente você descrever os modelos Pydantic e os parâmetros dos endpoints, melhor será a documentação.
# No arquivo de modelos Pydantic ou em main.py
class PlanetBase(BaseModel):
name: str = Field(..., example="Terra", description="Nome do planeta")
description: str = Field(..., example="Planeta azul com vida diversa", description="Breve descrição")
# ...
class Planet(PlanetBase):
id: int
is_habitable: bool
class Config:
orm_mode = True # ou from_attributes = True no Pydantic v2
# No arquivo de rotas
@router.get(
"/planets",
response_model=list[Planet],
summary="Obter lista de todos os planetas",
description="Retorna uma lista de todos os planetas conhecidos com paginação (futuramente)."
)
def get_planets():
# ...
@router.post(
"/planets",
# ...
summary="Criar novo planeta",
responses={
401: {"description": "Usuário não autorizado"},
422: {"description": "Erro de validação de dados"}
}
)
def create_planet(planet: PlanetCreate, ...):
# ...
Field(..., example="...")
: Adiciona exemplos à documentação.summary
: Breve descrição do endpoint.description
: Descrição detalhada.responses
: Descrição de possíveis códigos de resposta, além do sucesso.
Passo 3: Abra a documentação no navegador
Inicie seu servidor FastAPI e abra duas URLs mágicas:
http://127.0.0.1:8000/docs
— abrirá a documentação interativa Swagger UI. Aqui você pode não apenas ler, mas também testar seus endpoints diretamente do navegador!http://127.0.0.1:8000/redoc
— abrirá uma visão alternativa da documentação ReDoc. É menos interativa, mas frequentemente mais legível.
3. Documentação no Laravel: Usando pacotes de terceiros
Ao contrário do FastAPI, Laravel não gera documentação "out-of-the-box". No entanto, existem excelentes pacotes que fazem isso, analisando seu código. O mais popular é o Scribe.
Passo 1: Instalação do Scribe
Passo 2: Descrevendo endpoints usando DocBlocks
Scribe lê os PHP DocBlocks (comentários do tipo /** ... */
) acima dos métodos do seu controlador.
Abra app/Http/Controllers/PlanetController.php
:
// app/Http/Controllers/PlanetController.php
/**
* @group Planetas
* API para gerenciamento de planetas
*/
class PlanetController extends Controller
{
/**
* Obter lista de planetas
*
* Retorna uma lista paginada de todos os planetas na galáxia.
*
* @unauthenticated
*/
public function index()
{
// ...
}
/**
* Criar um novo planeta
*
* @authenticated
*
* @bodyParam name string required Nome do planeta. Example: Kepler-186f
* @bodyParam description string required Descrição do planeta.
* @bodyParam size_km integer required Diâmetro em quilômetros. Example: 14000
* @bodyParam is_habitable boolean Se o planeta é habitável. Example: true
*
* @response 201 {
* "id": 4,
* "name": "Kepler-186f",
* "description": "Primeiro planeta confirmado do tamanho da Terra na zona habitável de outra estrela.",
* "size_km": 14000,
* "is_habitable": true,
* "created_at": "2023-10-27T12:00:00.000000Z",
* "updated_at": "2023-10-27T12:00:00.000000Z"
* }
*/
public function store(Request $request)
{
// ...
}
// ... e assim por diante para outros métodos
}
Tags chave do Scribe:
@group
: Agrupa endpoints.@unauthenticated
/@authenticated
: Indica se um token é necessário.@bodyParam
: Descreve um parâmetro no corpo da requisição.@response
: Exemplo de resposta de sucesso.
Passo 3: Geração e visualização da documentação
Cada vez que fizer alterações nos DocBlocks, execute o comando:
Scribe criará uma página HTML estática com sua documentação. Abra-a no endereço:http://your-app-url/docs
.
Quiz para fixação
🚀 Conclusão do capítulo:
Você criou documentação profissional, transformando suas APIs de "caixas-pretas" em ferramentas compreensíveis e fáceis de usar.
- ✅ Entendeu a importância crítica de documentar APIs.
- 🪄 Aprendeu a usar a geração automática de documentação no FastAPI.
- ⚙️ Dominou os fundamentos do pacote Scribe para documentar APIs no Laravel.
- 🛰️ Confirmou que uma boa documentação é o melhor auxiliar para qualquer desenvolvedor.
Suas APIs agora não só funcionam e estão protegidas, mas também estão totalmente prontas para serem usadas por outros membros da equipe. Resta o último, mas mais importante passo — a verificação de segurança final.
📌 Verificação:
- Para FastAPI: abra
/docs
no navegador e tente executar uma requisiçãoGET
para a lista de planetas diretamente da interface Swagger UI.- Para Laravel: execute
php artisan scribe:generate
e abra/docs
. Certifique-se de que os endpoints estão agrupados e que o métodostore
tem uma descrição de parâmetros.