更新 API meta 版本号

将 shared-contracts 与前端共享 API_VERSION 更新为 2026-06-16

同步 healthz 响应头断言与 API envelope 测试夹具

补充 api-server 文档中的 API_VERSION 来源说明
This commit is contained in:
2026-06-16 16:37:40 +08:00
parent 9ab87956f8
commit 6984af782c
9 changed files with 44 additions and 44 deletions

View File

@@ -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';

View File

@@ -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` 内记录的请求开始时间。

View File

@@ -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"));

View File

@@ -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";

View File

@@ -18,7 +18,7 @@ describe('parseApiErrorMessage', () => {
},
},
meta: {
apiVersion: '2026-04-08',
apiVersion: '2026-06-16',
},
}),
'Fallback failure',

View File

@@ -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',
},

View File

@@ -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);

View File

@@ -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',
},
}),

View File

@@ -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',
},