feat: harden errors, recovery, and resource usage
This commit is contained in:
+12
-10
@@ -1,5 +1,7 @@
|
||||
# API contract v1
|
||||
|
||||
Machine-readable HTTP documentation: [openapi.yaml](openapi.yaml).
|
||||
|
||||
All JSON is UTF-8 and uses `Content-Type: application/json`. API responses set
|
||||
`Cache-Control: no-store`. A request exceeding its route limit is rejected
|
||||
before parsing with `PAYLOAD_TOO_LARGE`; malformed JSON is `MALFORMED_JSON`.
|
||||
@@ -7,15 +9,15 @@ All numeric fields are decimal JSON integers, never strings.
|
||||
|
||||
## Common values
|
||||
|
||||
| Type | Values / bound |
|
||||
| ------------------- | --------------------------------------------------------------------------- |
|
||||
| `role` | `player1`, `player2`, `spectator` |
|
||||
| `mode` | `human`, `bot` |
|
||||
| `phase` | `lobby`, `preparing`, `in_progress`, `finished`, `rematch_wait` |
|
||||
| `token` | exactly 32 lowercase hexadecimal characters |
|
||||
| `gameId`, `version` | unsigned 32-bit integer |
|
||||
| `x`, `y` | integer 0–9 |
|
||||
| `name` | 1–20 scalar values, at most 80 UTF-8 bytes |
|
||||
| Type | Values / bound |
|
||||
| ------------------- | ---------------------------------------------------------------------------------------------- |
|
||||
| `role` | `player1`, `player2`, `spectator` |
|
||||
| `mode` | `human`, `bot` |
|
||||
| `phase` | `lobby`, `preparing`, `in_progress`, `finished`, `rematch_wait` |
|
||||
| `token` | exactly 32 lowercase hexadecimal characters |
|
||||
| `gameId`, `version` | unsigned 32-bit integer |
|
||||
| `x`, `y` | integer 0–9 |
|
||||
| `name` | 1–20 scalar values, at most 80 UTF-8 bytes |
|
||||
| `board` | exactly 100 ASCII cells: `0` unknown/water, `1` revealed ship, `2` miss, `3` hit, `4` sunk hit |
|
||||
|
||||
Every state-changing request has `token` and `gameId`; they must precede any
|
||||
@@ -46,7 +48,7 @@ Failure (maximum 160 encoded bytes):
|
||||
| Route | Maximum request | Response / maximum |
|
||||
| -------------------------- | --------------: | --------------------------------------------- |
|
||||
| `GET /api/info` | 128 B target | public device/slot state, 192 B |
|
||||
| `GET /api/health` | 128 B target | diagnostics without secrets, 320 B |
|
||||
| `GET /api/health` | 128 B target | diagnostics without secrets, 320 B; includes reset reason |
|
||||
| `POST /api/session/join` | 192 B body | `{name,requestedRole}`; token and role, 192 B |
|
||||
| `POST /api/session/resume` | 96 B body | `{token}`; role and state metadata, 192 B |
|
||||
| `POST /api/game/config` | 96 B body | `{token,gameId,mode}`; common envelope |
|
||||
|
||||
Reference in New Issue
Block a user