更新 API meta 版本号
将 shared-contracts 与前端共享 API_VERSION 更新为 2026-06-16 同步 healthz 响应头断言与 API envelope 测试夹具 补充 api-server 文档中的 API_VERSION 来源说明
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
export const API_VERSION = '2026-04-08';
|
||||
export const API_VERSION = '2026-06-16';
|
||||
export const API_RESPONSE_ENVELOPE_HEADER = 'x-genarrative-response-envelope';
|
||||
export const API_RESPONSE_ENVELOPE_VERSION = 'v1';
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
当前基础响应头约定:
|
||||
|
||||
1. 所有响应都会回写 `x-request-id`。
|
||||
2. 所有响应都会回写固定的 `x-api-version`,当前值与 body `meta.apiVersion` 保持一致。
|
||||
2. 所有响应都会回写固定的 `x-api-version`,值来自 `shared_contracts::api::API_VERSION`,当前为 `2026-06-16`,并与 body `meta.apiVersion` 保持一致。
|
||||
3. 所有响应都会回写 `x-route-version`,当前阶段默认与 `x-api-version` 保持一致,后续再按路由粒度细分。
|
||||
4. 所有响应都会回写 `x-response-time-ms`,值来源于 `RequestContext` 内记录的请求开始时间。
|
||||
|
||||
|
||||
@@ -486,14 +486,14 @@ mod tests {
|
||||
.headers()
|
||||
.get("x-api-version")
|
||||
.and_then(|value| value.to_str().ok()),
|
||||
Some("2026-04-08")
|
||||
Some("2026-06-16")
|
||||
);
|
||||
assert_eq!(
|
||||
response
|
||||
.headers()
|
||||
.get("x-route-version")
|
||||
.and_then(|value| value.to_str().ok()),
|
||||
Some("2026-04-08")
|
||||
Some("2026-06-16")
|
||||
);
|
||||
assert!(response.headers().contains_key("x-response-time-ms"));
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::Value;
|
||||
|
||||
pub const API_VERSION: &str = "2026-04-08";
|
||||
pub const API_VERSION: &str = "2026-06-16";
|
||||
pub const API_RESPONSE_ENVELOPE_HEADER: &str = "x-genarrative-response-envelope";
|
||||
pub const X_REQUEST_ID_HEADER: &str = "x-request-id";
|
||||
pub const API_VERSION_HEADER: &str = "x-api-version";
|
||||
|
||||
@@ -18,7 +18,7 @@ describe('parseApiErrorMessage', () => {
|
||||
},
|
||||
},
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
},
|
||||
}),
|
||||
'Fallback failure',
|
||||
|
||||
@@ -37,8 +37,8 @@ describe('useResolvedAssetReadUrl', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
routeVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
routeVersion: '2026-06-16',
|
||||
latencyMs: 1,
|
||||
timestamp: '2099-01-01T00:00:00Z',
|
||||
},
|
||||
@@ -86,8 +86,8 @@ describe('useResolvedAssetReadUrl', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
routeVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
routeVersion: '2026-06-16',
|
||||
latencyMs: 1,
|
||||
timestamp: '2099-01-01T00:00:00Z',
|
||||
},
|
||||
@@ -131,8 +131,8 @@ describe('useResolvedAssetReadUrl', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
routeVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
routeVersion: '2026-06-16',
|
||||
latencyMs: 1,
|
||||
timestamp: '2099-01-01T00:00:00Z',
|
||||
},
|
||||
@@ -180,8 +180,8 @@ describe('useResolvedAssetReadUrl', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
routeVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
routeVersion: '2026-06-16',
|
||||
latencyMs: 1,
|
||||
timestamp: '2099-01-01T00:00:00Z',
|
||||
},
|
||||
@@ -235,8 +235,8 @@ describe('useResolvedAssetReadUrl', () => {
|
||||
message: '对象不存在',
|
||||
},
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
routeVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
routeVersion: '2026-06-16',
|
||||
latencyMs: 1,
|
||||
timestamp: '2099-01-01T00:00:00Z',
|
||||
},
|
||||
@@ -274,8 +274,8 @@ describe('useResolvedAssetReadUrl', () => {
|
||||
message: '对象不存在',
|
||||
},
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
routeVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
routeVersion: '2026-06-16',
|
||||
latencyMs: 1,
|
||||
timestamp: '2099-01-01T00:00:00Z',
|
||||
},
|
||||
|
||||
@@ -423,7 +423,7 @@ function createApiEnvelopeResponse(data: unknown) {
|
||||
data,
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
},
|
||||
}),
|
||||
} as Response;
|
||||
@@ -1181,7 +1181,7 @@ describe('ai runtime client orchestration', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
},
|
||||
}),
|
||||
} as Response);
|
||||
|
||||
@@ -88,7 +88,7 @@ describe('apiClient', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
},
|
||||
}),
|
||||
}),
|
||||
@@ -103,7 +103,7 @@ describe('apiClient', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
},
|
||||
}),
|
||||
}),
|
||||
@@ -164,7 +164,7 @@ describe('apiClient', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
},
|
||||
}),
|
||||
}),
|
||||
@@ -179,7 +179,7 @@ describe('apiClient', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
},
|
||||
}),
|
||||
}),
|
||||
@@ -409,7 +409,7 @@ describe('apiClient', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
},
|
||||
}),
|
||||
}),
|
||||
@@ -440,7 +440,7 @@ describe('apiClient', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
},
|
||||
}),
|
||||
}),
|
||||
@@ -502,7 +502,7 @@ describe('apiClient', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
},
|
||||
}),
|
||||
headers: {
|
||||
@@ -572,7 +572,7 @@ describe('apiClient', () => {
|
||||
},
|
||||
},
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
requestId: 'req-body',
|
||||
},
|
||||
}),
|
||||
|
||||
@@ -74,8 +74,8 @@ describe('assetReadUrlService', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
routeVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
routeVersion: '2026-06-16',
|
||||
latencyMs: 1,
|
||||
timestamp: '2099-01-01T00:00:00Z',
|
||||
},
|
||||
@@ -114,8 +114,8 @@ describe('assetReadUrlService', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
routeVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
routeVersion: '2026-06-16',
|
||||
latencyMs: 1,
|
||||
timestamp: '2099-01-01T00:00:00Z',
|
||||
},
|
||||
@@ -155,8 +155,8 @@ describe('assetReadUrlService', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
routeVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
routeVersion: '2026-06-16',
|
||||
latencyMs: 1,
|
||||
timestamp: '2099-01-01T00:00:00Z',
|
||||
},
|
||||
@@ -198,8 +198,8 @@ describe('assetReadUrlService', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
routeVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
routeVersion: '2026-06-16',
|
||||
latencyMs: 1,
|
||||
timestamp: '2099-01-01T00:00:00Z',
|
||||
},
|
||||
@@ -240,8 +240,8 @@ describe('assetReadUrlService', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
routeVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
routeVersion: '2026-06-16',
|
||||
latencyMs: 1,
|
||||
timestamp: '2099-01-01T00:00:00Z',
|
||||
},
|
||||
@@ -285,8 +285,8 @@ describe('assetReadUrlService', () => {
|
||||
},
|
||||
error: null,
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
routeVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
routeVersion: '2026-06-16',
|
||||
latencyMs: 1,
|
||||
timestamp: '2099-01-01T00:00:00Z',
|
||||
},
|
||||
@@ -323,8 +323,8 @@ describe('assetReadUrlService', () => {
|
||||
message: '对象不存在',
|
||||
},
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
routeVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
routeVersion: '2026-06-16',
|
||||
latencyMs: 1,
|
||||
timestamp: '2099-01-01T00:00:00Z',
|
||||
},
|
||||
@@ -363,8 +363,8 @@ describe('assetReadUrlService', () => {
|
||||
message: '登录状态已失效',
|
||||
},
|
||||
meta: {
|
||||
apiVersion: '2026-04-08',
|
||||
routeVersion: '2026-04-08',
|
||||
apiVersion: '2026-06-16',
|
||||
routeVersion: '2026-06-16',
|
||||
latencyMs: 1,
|
||||
timestamp: '2099-01-01T00:00:00Z',
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user