mirror of
https://github.com/simonw/datasette.git
synced 2026-07-09 00:54:35 +02:00
Unify JSON error responses into one canonical shape
All JSON error responses now use a single format built by the new
datasette.utils.error_body() helper:
{"ok": false, "error": "...", "errors": ["..."], "status": 400}
- error is all messages joined with '; ', errors is the full list,
status always matches the HTTP status code
- The exception handler no longer emits the legacy title key in JSON
(it is still available to the HTML error template)
- The permission debug endpoints (/-/allowed, /-/rules, /-/check,
POST /-/permissions) no longer return bare {"error": ...} objects
- JSON renderer SQL errors keep their rows/truncated context keys but
now include the canonical keys as well
- _shape=object misuse (queries or tables without primary keys) now
returns HTTP 400 instead of 200 with an error body
- Method-not-allowed 405 responses use the canonical shape
Adds tests/test_error_shape.py covering all four previous shape
producers, updates affected tests, and documents the format in a new
'Error responses' section of docs/json_api.rst.
Implements section 1 of stable-api-recommendations.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GrHZSypDfMnym1tM5XJAFZ
This commit is contained in:
parent
8985ecf438
commit
0679e04bd3
15 changed files with 429 additions and 169 deletions
|
|
@ -18,7 +18,17 @@ Findings are grouped by theme. Each carries a priority:
|
|||
|
||||
---
|
||||
|
||||
## 1. Error responses: four shapes is three too many (P1)
|
||||
## 1. Error responses: four shapes is three too many (P1) — ✅ IMPLEMENTED
|
||||
|
||||
> **Status:** implemented. All four shapes now delegate to a shared
|
||||
> `error_body()` helper (`datasette/utils/__init__.py`) producing
|
||||
> `{"ok": false, "error": "<joined>", "errors": [...], "status": <int>}`.
|
||||
> The `title` key is no longer emitted in JSON; the bare `{"error": ...}`
|
||||
> debug-endpoint shape is gone; `_shape=object` misuse now returns HTTP 400
|
||||
> (part of §1b). Covered by `tests/test_error_shape.py` and documented in
|
||||
> the "Error responses" section of `docs/json_api.rst`. Still open from
|
||||
> this section's sub-items: §1a (`Forbidden` → HTML), the write
|
||||
> canned-query 200 (§1b), and the §1c status outliers.
|
||||
|
||||
The API currently produces four distinct JSON error shapes depending on which
|
||||
internal layer generates the error:
|
||||
|
|
@ -348,7 +358,7 @@ Two details make tiering urgent rather than optional:
|
|||
|
||||
## 10. Summary of P1 items (the pre-1.0 checklist)
|
||||
|
||||
1. One canonical JSON error shape; retire the other three (§1).
|
||||
1. ~~One canonical JSON error shape; retire the other three (§1).~~ ✅ Done.
|
||||
2. `Forbidden` → JSON 403 for JSON requests (§1a).
|
||||
3. No `ok: false` with HTTP 200 (§1b: `_shape=object`, write canned-query
|
||||
SQL errors).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue