Skip to content

FT7 F-1: 404 を Accept ヘッダで content-negotiation する (REST には JSON envelope を返す) #312

@hideyukiMORI

Description

@hideyukiMORI

Source: FT7 (#308 / PR #311) — docs/field-trials/2026-05-field-trial-7.md F-1。
Severity: medium / Kind: design-trade-off / Decision: fix-in-framework。

現状

class/xion/Dispatcher.php:230-234 の `notFoundResponse()` は常に repo root の `404.html` を `Content-Type: text/html` で返す。`Accept: application/json` を付けた REST client にも HTML が返るので、ADR-0003 (ApiFailureEnvelope) の契約が 404 だけ守られていない。

やること

  • `Dispatcher::notFoundResponse()` に Accept ヘッダ判定を入れ、JSON を期待する client には ADR-0003 envelope (`errorCode: 'NOT-FOUND'` 等) を返す
  • error 一覧 (`docs/development/error-codes.md`) に 404 envelope の項目を追加
  • 既存テスト (`tests/Unit/Xion/DispatcherTest.php` / `tests/Http/HttpSmokeTest.php`) に Accept 別の 404 assertion を追加

受け入れ条件

  • `curl -H 'Accept: application/json' …/no-such` で JSON envelope (`Result/Data`) が返る
  • Accept 無し / `Accept: text/html` のときは従来どおり `404.html` を返す
  • 既存の `composer test` / `composer test:http` が green

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions