Referência da API REST do AppsQuality Lab. Base URL: https://appsquality.com.br/wp-json/aq-lab/v1. Especificação completa em openapi.json (importável no Postman, Insomnia ou Swagger UI).
Ambiente público de testes: dados fictícios, temporários (1 h) e isolados por token. Não envie dados pessoais reais.
Autenticação
Faça POST /auth/login com {"username":"standard_user","password":"qa@12345"}. A resposta traz token (válido por 1 hora). Envie-o em Authorization: Bearer <token> ou, se um proxy remover esse cabeçalho, em X-Lab-Token. Endpoints marcados com 🔒 exigem token.
Formato de erro
Todos os erros seguem o mesmo formato. Em validação (422) vem a lista errors com um item por campo.
{
"status": 422,
"code": "validation_error",
"message": "Verifique os campos destacados.",
"errors": [
{ "field": "email", "message": "E-mail inválido." }
]
}
| Código | Quando acontece |
|---|---|
| 200 / 201 / 204 | Sucesso; 201 ao criar (com cabeçalho Location); 204 em exclusões e logout |
| 400 | Corpo ou parâmetros inválidos, JSON malformado, carrinho vazio no checkout |
| 401 | Token ausente, inválido ou expirado; credenciais erradas no login |
| 403 | Tentativa de alterar ou excluir registro de exemplo somente leitura (id 1 de contatos e reservas) |
| 404 | Rota, produto, item ou registro inexistente |
| 409 | Conflito: produto esgotado, quantidade indisponível, e-mail já cadastrado, limite de registros |
| 413 | Corpo maior que 16 KB |
| 422 | Validação por campo |
| 423 | Usuário bloqueado (locked_user) |
| 429 | Limite de 120 requisições/min por IP (veja Retry-After) |
| 500 | Falha simulada do error_user no checkout |
Cabeçalhos úteis
X-Total-CounteX-Total-Pagesnas listagens paginadas (?page=e?per_page=, máx. 50).X-RateLimit-Limit,X-RateLimit-RemainingeX-RateLimit-Resetem todas as respostas.- CORS liberado (
Access-Control-Allow-Origin: *) apenas neste namespace, sem cookies.
Autenticação
Login com usuários fictícios e token Bearer de 1 hora.
| Método | Rota | Descrição | Respostas |
|---|---|---|---|
POST | /auth/login | Login com usuário de teste. Senha comum: qa@12345. Usuários: standard_user, locked_user, slow_user, problem_user, error_user. O token vale 1 hora. | 200, 400, 401, 423, 429 |
GET | /auth/me 🔒 | Dados do usuário do token. | 200, 401, 429 |
POST | /auth/logout 🔒 | Encerra o token. | 204, 401, 429 |
POST | /reset 🔒 | Restaura os dados do token ao estado inicial. | 200, 401, 429 |
GET | /users | Lista os usuários de teste e seus comportamentos. | 200, 429 |
Catálogo
Produtos fixos da QA Store (públicos; com token, os bugs do problem_user aparecem).
| Método | Rota | Descrição | Respostas |
|---|---|---|---|
GET | /products | Lista produtos. Com token do problem_user, os bugs propositais aparecem (imagens erradas, price_desc ignorado). | 200, 400, 429 |
GET | /products/{id} | Detalhe do produto. | 200, 404, 429 |
GET | /categories | Lista categorias. | 200, 429 |
Carrinho e pedidos
Dados isolados por token.
| Método | Rota | Descrição | Respostas |
|---|---|---|---|
GET | /cart 🔒 | Carrinho do token. | 200, 401, 429 |
POST | /cart 🔒 | Adiciona produto ao carrinho. Soma à quantidade existente. Máximo de 10 unidades por produto (ou o estoque). | 201, 404, 409, 422, 401, 429 |
DELETE | /cart 🔒 | Esvazia o carrinho. | 204, 401, 429 |
PATCH | /cart/{id} 🔒 | Altera a quantidade (0 remove). | 200, 404, 409, 422, 401, 429 |
DELETE | /cart/{id} 🔒 | Remove o produto do carrinho. | 204, 404, 401, 429 |
POST | /checkout 🔒 | Finaliza a compra. Valida nome, sobrenome e CEP (8 dígitos). Frete fictício: grátis a partir de R$ 200, senão R$ 19,90. Com error_user, falha com 500 nas tentativas ímpares. | 201, 400, 409, 422, 500, 401, 429 |
GET | /orders 🔒 | Lista pedidos do token (mais novo primeiro). | 200, 401, 429 |
GET | /orders/{id} 🔒 | Detalhe do pedido. | 200, 404, 401, 429 |
Exemplo de corpo para POST /cart:
{
"productId": 1,
"qty": 2
}
Exemplo de corpo para POST /checkout:
{
"firstName": "Maria",
"lastName": "Teste",
"zipCode": "01234-567"
}
Contatos
CRUD com validação por campo (422) e conflito de e-mail (409).
| Método | Rota | Descrição | Respostas |
|---|---|---|---|
GET | /contacts 🔒 | Lista contatos. | 200, 401, 429 |
POST | /contacts 🔒 | Cria contato. Obrigatórios: firstName, lastName, email, phone (10 ou 11 dígitos, máscara opcional). E-mail único por token. | 201, 409, 422, 401, 429 |
GET | /contacts/{id} 🔒 | Detalhe do contato. | 200, 404, 401, 429 |
PUT | /contacts/{id} 🔒 | Substitui o contato (todos os campos obrigatórios). | 200, 403, 404, 409, 422, 401, 429 |
PATCH | /contacts/{id} 🔒 | Atualiza campos do contato. | 200, 403, 404, 409, 422, 401, 429 |
DELETE | /contacts/{id} 🔒 | Exclui o contato. | 204, 403, 404, 401, 429 |
Exemplo de corpo para POST /contacts:
{
"firstName": "Maria",
"lastName": "Teste",
"email": "maria.teste@example.test",
"phone": "(11) 91234-5678",
"company": "Empresa Fictícia",
"notes": "Contato de exemplo"
}
Reservas
CRUD de reservas de hotel fictício com regras de datas e preço.
| Método | Rota | Descrição | Respostas |
|---|---|---|---|
GET | /bookings 🔒 | Lista reservas. | 200, 401, 429 |
POST | /bookings 🔒 | Cria reserva. checkin < checkout; totalPrice >= 0; roomType: standard, luxo ou suite. | 201, 409, 422, 401, 429 |
GET | /bookings/{id} 🔒 | Detalhe da reserva. | 200, 404, 401, 429 |
PUT | /bookings/{id} 🔒 | Substitui a reserva. | 200, 403, 404, 422, 401, 429 |
PATCH | /bookings/{id} 🔒 | Atualiza campos da reserva. | 200, 403, 404, 422, 401, 429 |
DELETE | /bookings/{id} 🔒 | Exclui a reserva. | 204, 403, 404, 401, 429 |
Exemplo de corpo para POST /bookings:
{
"guestName": "Joana Teste",
"roomType": "luxo",
"checkin": "2030-01-10",
"checkout": "2030-01-12",
"totalPrice": 520.0,
"depositPaid": true,
"notes": "Café da manhã"
}
Utilitários HTTP
Endpoints didáticos para treinar status, atrasos, cabeçalhos e corpo.
| Método | Rota | Descrição | Respostas |
|---|---|---|---|
GET | /status | Health check. | 200, 429 |
GET | /http/status/{code} | Devolve o status pedido (100–599). Também aceita POST, PUT, PATCH e DELETE. 1xx devolve 200 com explicação (não pode ser resposta final); 3xx de redirecionamento traz Location. | 200, 400, 429 |
GET | /http/delay/{s} | Responde após s segundos (0–5). | 200, 400, 429 |
GET | /http/headers | Ecoa os cabeçalhos da requisição. Authorization, Cookie, X-AQ-Authorization, X-Lab-Token e Proxy-Authorization são removidos da resposta. | 200, 429 |
POST | /http/echo | Ecoa o corpo JSON. Também aceita PUT e PATCH. Limite de 16 KB. | 200, 400, 413, 429 |
GET | /openapi.json | Esta especificação. | 200, 429 |
Usuários de teste
| Usuário | Comportamento |
|---|---|
standard_user | Tudo funciona como esperado. |
locked_user | O login sempre responde 423 (conta bloqueada). |
slow_user | Login e todas as requisições autenticadas demoram cerca de 3 segundos. |
problem_user | Bugs de propósito: todas as imagens são a mesma figura quebrada; a ordenação price_desc é ignorada; adicionar o produto 7 coloca o 8 no carrinho; o sobrenome some do pedido. |
error_user | O checkout falha com 500 nas tentativas ímpares (1ª, 3ª…) e funciona nas pares. |
