Files
dota-random-builds/dota-random-builds-front/API.md
2025-12-16 22:16:45 +03:00

53 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# API Endpoints for Frontend Compatibility
This document defines the minimal backend surface expected by the Vue frontend. Default base path is `/api`; responses are JSON with `Content-Type: application/json`.
## POST /api/randomize
- **Purpose:** Produce a randomized Dota 2 build and optionally return the full data sets used for rendering.
- **Request body:**
- `includeSkills` (boolean) — include a skill build suggestion.
- `includeAspect` (boolean) — include an aspect suggestion.
- `itemsCount` (number) — how many items to return (UI offers 36).
- **Response 200 body:**
- `hero` — object `{ id: string; name: string; primary: string; }`.
- `items` — array of `{ id: string; name: string; }` with length `itemsCount` (also used to hydrate cached items if you return the full pool).
- `skillBuild` (optional) — `{ id: string; name: string; description?: string; }` when `includeSkills` is true.
- `aspect` (optional) — string when `includeAspect` is true.
- `heroes` (optional) — full hero list to cache client-side; same shape as `hero`.
- `skillBuilds` (optional) — full skill build list; same shape as `skillBuild`.
- `aspects` (optional) — array of strings.
- **Example request:**
```json
{
"includeSkills": true,
"includeAspect": false,
"itemsCount": 6
}
```
- **Example response:**
```json
{
"hero": { "id": "pudge", "name": "Pudge", "primary": "strength" },
"items": [
{ "id": "blink", "name": "Blink Dagger" },
{ "id": "bkb", "name": "Black King Bar" }
],
"skillBuild": { "id": "hookdom", "name": "Hook/Rot Max", "description": "Max hook, then rot; early Flesh Heap." },
"heroes": [{ "id": "axe", "name": "Axe", "primary": "strength" }],
"skillBuilds": [{ "id": "support", "name": "Support" }],
"aspects": ["Heroic Might"]
}
```
## Error Handling
- Use standard HTTP status codes (400 invalid input, 500 server error).
- Error payload shape:
```json
{ "message": "Failed to load random build" }
```
- The UI surfaces `message` directly; keep it user-friendly.
## Implementation Notes
- Ensure deterministic constraints: unique `id` per entity and avoid empty arrays when `includeSkills`/`includeAspect` are true.
- If backing data is static, you may return `heroes/items/skillBuilds/aspects` once per request; the frontend caches them after the first successful call.