Skip to content

feat(api): 未定義サブパスの404と未捕捉500を imsx 形式で返す (C14/C15)#5

Merged
kentalow merged 1 commit into
mainfrom
feat/case-error-envelope-404-500
Jun 20, 2026
Merged

feat(api): 未定義サブパスの404と未捕捉500を imsx 形式で返す (C14/C15)#5
kentalow merged 1 commit into
mainfrom
feat/case-error-envelope-404-500

Conversation

@kentalow

Copy link
Copy Markdown
Member

概要

conformance backlog の C14 / C15 を実装します。CASE API パス(/{tenant}/ims/case/v1p1/...)でのエラー封筒を補完し、ドキュメント記載の挙動に実装を合わせます。

  • C14: 未定義サブパスへのアクセス → 404 unknownobject の imsx_StatusInfo 形式
  • C15: 未捕捉エラー → 500 internal_server_error の imsx_StatusInfo 形式

実装

src/main.py に2つの例外ハンドラを追加:

  • StarletteHTTPException ハンドラ: CASE API パスの 404 のみ imsx 化。それ以外(Web UI・静的ファイル・405 等)は FastAPI 既定ハンドラへ委譲。
  • Exception ハンドラ: CASE API パスは imsx 500、それ以外は Starlette 既定のプレーン 500。いずれも ServerErrorMiddleware が元例外を再 raise するためトレースバックはログに残る(観測性を維持)。

CASE API 以外の挙動は一切変えません。

テスト

tests/integration/test_error_envelope.py(新規):

  • CASE 未定義サブパス → imsx 404
  • 非 CASE の 404(静的ファイル欠落)→ 既定形式を維持
  • 非 CASE の 405(POST /health)→ 既定形式を維持
  • CASE API での 500 → imsx 500(サービスを monkeypatch で失敗させて検証)

全 665 テスト pass / ruff clean。

ドキュメント

  • api-spec.md / api-examples.md: 「未実装」注記を「実装済み」に更新
  • case-v1p1-conformance-backlog.md: C14 / C15 を「すでに対応済み」へ移動

残りの C11 / C12 / C8 は別 PR で実装予定です。

🤖 Generated with Claude Code

CASE API パス(/{tenant}/ims/case/v1p1/...)での
- 未定義サブパスへのアクセスを 404 unknownobject の imsx_StatusInfo 形式に
- 未捕捉エラーを 500 internal_server_error の imsx_StatusInfo 形式に
変換するハンドラを main.py に追加。CASE API 以外のパス(Web UI 等)は
FastAPI/Starlette の既定挙動を維持。500 は ServerErrorMiddleware が
元例外を再 raise するためログには残る。

- StarletteHTTPException ハンドラ: CASE パスの 404 のみ imsx 化、他は既定へ委譲
- Exception ハンドラ: CASE パスは imsx 500、他は既定のプレーン 500
- tests/integration/test_error_envelope.py を追加(404/500/非CASE委譲)
- conformance backlog の C14/C15 を「対応済み」へ、api-spec/api-examples を更新

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XXFogp18twGiPFBAZcqJw2
@kentalow kentalow merged commit 17a3c1c into main Jun 20, 2026
2 checks passed
@kentalow kentalow deleted the feat/case-error-envelope-404-500 branch June 20, 2026 05:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant