RFC 9457 Problem Details 解析

http_request 回傳的非 2xx 內文未經解析,因此流程 —— 或 assert_http —— 無法以結構化方式讀取 標準化的 API 錯誤。本功能解析 RFC 9457 application/problem+json 文件:已註冊的 type / title / status / detail / instance 成員,加上任何 vendor 擴充欄位。

純標準函式庫(json);不匯入 PySide6。每個函式皆為純函式(輸入 response dict、輸出 dataclass), 因此在 CI 中完全具決定性。

無頭 API

from je_auto_control import http_request, parse_problem, raise_for_problem

response = http_request("https://api.example.com/orders/12")
problem = parse_problem(response)        # 非 problem+json 時為 None
if problem is not None:
    log(problem.status, problem.title, problem.detail)
    retry_after = problem.extensions.get("balance")

# 或把 problem 回應轉成例外:
raise_for_problem(response)              # 拋出 HttpProblemError

is_problem 檢查 Content-Type``(不分大小寫)。``parse_problem 回傳 ProblemDetails (type 預設 about:blank,可轉換時 status 為整數,所有非註冊鍵收進 extensions), 回應非 problem 文件時回傳 None;當 json 缺席時會回退去解析 textProblemDetails.summary 給出一行描述,``to_dict`` 把文件攤平並併回擴充欄位。raise_for_problem 對 problem 回應拋出 HttpProblemError``(帶著 ``ProblemDetails),否則不做任何事。

執行器命令

AC_parse_problem 接受 http_requestresponse,回傳 {problem}``(攤平的文件)或 ``null。它以 MCP 工具 ac_parse_problem 以及 Script Builder 中 Data 分類下的命令提供。