From 6984af782c741bdbe411756de8c0c0616f02dbe0 Mon Sep 17 00:00:00 2001 From: kdletters Date: Tue, 16 Jun 2026 16:37:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20API=20meta=20=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 shared-contracts 与前端共享 API_VERSION 更新为 2026-06-16 同步 healthz 响应头断言与 API envelope 测试夹具 补充 api-server 文档中的 API_VERSION 来源说明 --- packages/shared/src/http.ts | 2 +- server-rs/crates/api-server/README.md | 2 +- server-rs/crates/api-server/src/app.rs | 4 +-- server-rs/crates/shared-contracts/src/api.rs | 2 +- src/editor/shared/jsonClient.test.ts | 2 +- src/hooks/useResolvedAssetReadUrl.test.tsx | 24 +++++++-------- src/services/ai.test.ts | 4 +-- src/services/apiClient.test.ts | 16 +++++----- src/services/assetReadUrlService.test.ts | 32 ++++++++++---------- 9 files changed, 44 insertions(+), 44 deletions(-) diff --git a/packages/shared/src/http.ts b/packages/shared/src/http.ts index f5514932..cfa89536 100644 --- a/packages/shared/src/http.ts +++ b/packages/shared/src/http.ts @@ -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'; diff --git a/server-rs/crates/api-server/README.md b/server-rs/crates/api-server/README.md index 86b8cb6f..2a1bba8c 100644 --- a/server-rs/crates/api-server/README.md +++ b/server-rs/crates/api-server/README.md @@ -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` 内记录的请求开始时间。 diff --git a/server-rs/crates/api-server/src/app.rs b/server-rs/crates/api-server/src/app.rs index bebae236..5f02b46c 100644 --- a/server-rs/crates/api-server/src/app.rs +++ b/server-rs/crates/api-server/src/app.rs @@ -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")); diff --git a/server-rs/crates/shared-contracts/src/api.rs b/server-rs/crates/shared-contracts/src/api.rs index c6c3b433..ebd7d90f 100644 --- a/server-rs/crates/shared-contracts/src/api.rs +++ b/server-rs/crates/shared-contracts/src/api.rs @@ -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"; diff --git a/src/editor/shared/jsonClient.test.ts b/src/editor/shared/jsonClient.test.ts index 492c924f..43221d04 100644 --- a/src/editor/shared/jsonClient.test.ts +++ b/src/editor/shared/jsonClient.test.ts @@ -18,7 +18,7 @@ describe('parseApiErrorMessage', () => { }, }, meta: { - apiVersion: '2026-04-08', + apiVersion: '2026-06-16', }, }), 'Fallback failure', diff --git a/src/hooks/useResolvedAssetReadUrl.test.tsx b/src/hooks/useResolvedAssetReadUrl.test.tsx index 9c47d171..27147c8d 100644 --- a/src/hooks/useResolvedAssetReadUrl.test.tsx +++ b/src/hooks/useResolvedAssetReadUrl.test.tsx @@ -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', }, diff --git a/src/services/ai.test.ts b/src/services/ai.test.ts index 1a2a001a..78454070 100644 --- a/src/services/ai.test.ts +++ b/src/services/ai.test.ts @@ -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); diff --git a/src/services/apiClient.test.ts b/src/services/apiClient.test.ts index d57a6dac..d07505ac 100644 --- a/src/services/apiClient.test.ts +++ b/src/services/apiClient.test.ts @@ -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', }, }), diff --git a/src/services/assetReadUrlService.test.ts b/src/services/assetReadUrlService.test.ts index e83f5381..0dd11b1a 100644 --- a/src/services/assetReadUrlService.test.ts +++ b/src/services/assetReadUrlService.test.ts @@ -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', },