Catálogo de itens
Quando alguém cria uma oferta, o IdleBazaar consulta o catálogo com o nome digitado e mostra os itens encontrados com imagem.
Requisição
Um GET com dois parâmetros: q (texto pesquisado) e limit (sempre 12).
http
GET https://mygame.com/api/items?q=sword&limit=12Resposta
json
{
"items": [
{ "id": "42", "name": "Magic Sword", "image": "/images/items/42.png" },
{ "id": "43", "name": "Sword of Fury", "image": "https://mygame.com/images/items/43.png" }
]
}Regras
- A resposta precisa ter a lista
items. Só os 12 primeiros são usados. id: texto ou número com letras, números,_ou-, até 80 caracteres, sem repetir.name: até 200 caracteres.image: caminho relativo ou URL da mesma origem do catálogo.- As respostas ficam em cache por 1 minuto.
Exemplo de implementação
js
app.get('/api/items', (req, res) => {
const q = String(req.query.q ?? '').toLowerCase()
const limit = Math.min(Number(req.query.limit) || 12, 12)
const items = game.items
.filter(item => item.name.toLowerCase().includes(q))
.slice(0, limit)
.map(item => ({ id: String(item.id), name: item.name, image: `/images/items/${item.id}.png` }))
res.json({ items })
})php
<?php
header('Content-Type: application/json');
$q = mb_strtolower($_GET['q'] ?? '');
$items = array_filter($game->items(), fn ($item) => str_contains(mb_strtolower($item->name), $q));
echo json_encode(['items' => array_map(fn ($item) => [
'id' => (string) $item->id,
'name' => $item->name,
'image' => "/images/items/{$item->id}.png",
], array_slice(array_values($items), 0, 12))]);python
@app.get("/api/items")
def items():
q = request.args.get("q", "").lower()
found = [item for item in game.items if q in item.name.lower()][:12]
return {"items": [
{"id": str(item.id), "name": item.name, "image": f"/images/items/{item.id}.png"}
for item in found
]}