{"openapi":"3.0.3","info":{"title":"ShopCMS API","description":"ShopCMS（axum-weball）软件商城 REST API（no0 §7.2）。\n\n运行模式：dev / pro（no18 §1，`.env` 中 `APP_MODE` 切换）；\nREST 前缀 `/api/v1`，错误统一 `{ code, message, request_id }`（no0 §7.1）。","contact":{"name":"ShopCMS","email":"support@shopcms.dev"},"license":{"name":"MIT"},"version":"0.1.0"},"paths":{"/api/v1/i18n/{lang}":{"get":{"tags":["platform"],"summary":"词典接口（GET /api/v1/i18n/{lang}）：返回 `{ lang, name, dict }`。","description":"mock/dev/pro 均可访问；前端切换语言后按需拉取，避免整包下发。","operationId":"get_i18n","parameters":[{"name":"lang","in":"path","description":"语言代码：zh-CN / en","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"语言词典","content":{"application/json":{"schema":{"$ref":"#/components/schemas/I18nResponse"}}}}}}},"/healthz":{"get":{"tags":["platform"],"summary":"健康检查（no0 §8.3 可观测性：实际查询数据库连通性）。","operationId":"healthz","responses":{"200":{"description":"服务健康（数据库连通）"},"503":{"description":"数据库不可用"}}}}},"components":{"schemas":{"ApiErrorResponse":{"type":"object","description":"API 错误统一响应。旧字段保持兼容，新字段用于稳定地翻译错误。","required":["code","message","request_id","message_key","message_params","locale"],"properties":{"code":{"type":"string","description":"稳定业务错误码。"},"locale":{"$ref":"#/components/schemas/LocaleMetadata"},"message":{"type":"string","description":"当前语言的用户提示。"},"message_key":{"type":"string","description":"稳定的词典 key。"},"message_params":{"type":"object","description":"词典参数，不承载已翻译文本。"},"request_id":{"type":"string","description":"请求追踪 ID。"}}},"HealthResponse":{"type":"object","description":"健康检查响应（`/healthz`）。\n仅用于 OpenAPI schema 生成（utoipa 宏引用），字段无需业务读取，允许 dead_code。","required":["status","mode","db","time"],"properties":{"db":{"type":"string","description":"数据库状态：up / down。"},"mode":{"type":"string","description":"运行模式：dev / pro。"},"status":{"type":"string","description":"服务状态：ok / degraded。"},"time":{"type":"string","description":"当前时间（RFC3339）。"}}},"I18nResponse":{"type":"object","description":"i18n 词典响应（`/api/v1/i18n/{lang}`）。\n仅用于 OpenAPI schema 生成，字段无需业务读取，允许 dead_code。","required":["lang","name","count","dict"],"properties":{"count":{"type":"integer","description":"词典条目数。","minimum":0},"dict":{"type":"object","description":"扁平词典：key → 译文。","additionalProperties":{"type":"string"}},"lang":{"type":"string","description":"语言代码（如 zh-CN / en）。"},"name":{"type":"string","description":"语言名称（自身语言）。"}}},"LocaleMetadata":{"type":"object","description":"API 请求的语言解析结果。","required":["requested","resolved","fallback","source"],"properties":{"fallback":{"type":"boolean","description":"是否发生了 fallback。"},"requested":{"type":"string","description":"请求最终使用的语言。"},"resolved":{"type":"string","description":"响应实际使用的语言。"},"source":{"type":"string","description":"语言来源：query / identity / accept-language / default。"}}}}}}