Axiora 的接口不是“裸数组”式返回,而是围绕 data、meta、links 组织统一 envelope。写客户端时,应先按 envelope 解析,再处理内部字段。
统一响应 envelope
GET
/api/v1/markets/{market}Get one market
getMarket
| 状态码 | 说明 | Schema |
|---|---|---|
| 200 | Market resource | MarketResponse |
| 401 | Unauthorized | ErrorResponse |
| 404 | Resource not found | ErrorResponse |
MarketResponse
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| data | Market | 是 | — |
| data.id | MarketId | 是 | — |
| data.name | string | 是 | — |
| links | SelfLinks | 是 | — |
| links.self | string | 是 | — |
单对象响应通常包含:
data:真正的业务对象links:当前资源或相关链接
集合接口模式
GET
/api/v1/equitiesList equities
listEquities
| 状态码 | 说明 | Schema |
|---|---|---|
| 200 | Equity collection | InstrumentCollectionResponse |
| 400 | Invalid request parameters | ErrorResponse |
| 401 | Unauthorized | ErrorResponse |
InstrumentCollectionResponse
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| data | Array<Instrument> | 是 | — |
| data[].id | string | 是 | — |
| data[].code | string | 是 | — |
| data[].exchange | MarketId | 是 | — |
| data[].market | string | 是 | — |
| data[].asset_class | equity | index | fund | 是 | — |
| data[].board | string | 是 | — |
| data[].name | string | 是 | — |
| meta | Meta | 是 | — |
| meta.next_cursor | string | null | 是 | — |
| links | SelfLinks | 是 | — |
| links.self | string | 是 | — |
集合响应在 data 之外,通常还会多出:
meta:分页和结果规模信息links:翻页或自引用信息
错误响应
OpenAPI 里统一定义了未授权、未找到和参数错误等常见失败返回。客户端至少要做好这几类失败的分支处理。
ErrorResponse
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| error | object | 是 | — |
| error.code | string | 是 | — |
| error.message | string | 是 | — |
典型错误处理ts
const response = await fetch(url, options);
if (!response.ok) {
const payload = await response.json();
throw new Error(payload.error?.message ?? "Unknown API error");
}
const payload = await response.json();不要只按 HTTP 200 处理
即使同一数据域里的多个接口返回结构类似,也不要把错误体当成成功体解析。先判断 HTTP 状态,再进入业务字段处理。