build: add api version response header
This commit is contained in:
@@ -104,7 +104,8 @@
|
|||||||
交付物:[../server-rs/apps/api-server/src/api_response.rs](../server-rs/apps/api-server/src/api_response.rs)、[../server-rs/apps/api-server/src/request_context.rs](../server-rs/apps/api-server/src/request_context.rs)、[../server-rs/apps/api-server/src/http_error.rs](../server-rs/apps/api-server/src/http_error.rs)
|
交付物:[../server-rs/apps/api-server/src/api_response.rs](../server-rs/apps/api-server/src/api_response.rs)、[../server-rs/apps/api-server/src/request_context.rs](../server-rs/apps/api-server/src/request_context.rs)、[../server-rs/apps/api-server/src/http_error.rs](../server-rs/apps/api-server/src/http_error.rs)
|
||||||
- [x] 接入 `x-request-id`
|
- [x] 接入 `x-request-id`
|
||||||
交付物:[../server-rs/apps/api-server/src/response_headers.rs](../server-rs/apps/api-server/src/response_headers.rs)、[../server-rs/apps/api-server/src/app.rs](../server-rs/apps/api-server/src/app.rs)
|
交付物:[../server-rs/apps/api-server/src/response_headers.rs](../server-rs/apps/api-server/src/response_headers.rs)、[../server-rs/apps/api-server/src/app.rs](../server-rs/apps/api-server/src/app.rs)
|
||||||
- [ ] 接入 `x-api-version`
|
- [x] 接入 `x-api-version`
|
||||||
|
交付物:[../server-rs/apps/api-server/src/response_headers.rs](../server-rs/apps/api-server/src/response_headers.rs)
|
||||||
- [ ] 接入 `x-route-version`
|
- [ ] 接入 `x-route-version`
|
||||||
- [ ] 接入 `x-response-time-ms`
|
- [ ] 接入 `x-response-time-ms`
|
||||||
- [ ] 实现 `/healthz`
|
- [ ] 实现 `/healthz`
|
||||||
|
|||||||
@@ -57,6 +57,12 @@
|
|||||||
2. `json_success_body(...)` / `json_error_body(...)` 会根据 `x-genarrative-response-envelope` 自动在“裸数据 / 标准 envelope / legacy error + meta”之间切换。
|
2. `json_success_body(...)` / `json_error_body(...)` 会根据 `x-genarrative-response-envelope` 自动在“裸数据 / 标准 envelope / legacy error + meta”之间切换。
|
||||||
3. `meta.apiVersion`、`meta.requestId`、`meta.routeVersion`、`meta.operation`、`meta.latencyMs`、`meta.timestamp` 已按当前前端契约生成,响应头回写仍留给后续独立任务。
|
3. `meta.apiVersion`、`meta.requestId`、`meta.routeVersion`、`meta.operation`、`meta.latencyMs`、`meta.timestamp` 已按当前前端契约生成,响应头回写仍留给后续独立任务。
|
||||||
|
|
||||||
|
当前基础响应头约定:
|
||||||
|
|
||||||
|
1. 所有响应都会回写 `x-request-id`。
|
||||||
|
2. 所有响应都会回写固定的 `x-api-version`,当前值与 body `meta.apiVersion` 保持一致。
|
||||||
|
3. `x-route-version` 与 `x-response-time-ms` 仍留在后续独立任务中补齐。
|
||||||
|
|
||||||
## 3. 边界约束
|
## 3. 边界约束
|
||||||
|
|
||||||
1. `api-server` 负责 HTTP、SSE、Cookie、Header、路由与协议装配。
|
1. `api-server` 负责 HTTP、SSE、Cookie、Header、路由与协议装配。
|
||||||
|
|||||||
@@ -5,7 +5,12 @@ use axum::{
|
|||||||
response::Response,
|
response::Response,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::request_context::{resolve_request_id, X_REQUEST_ID_HEADER};
|
use crate::{
|
||||||
|
api_response::API_VERSION,
|
||||||
|
request_context::{resolve_request_id, X_REQUEST_ID_HEADER},
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const API_VERSION_HEADER: &str = "x-api-version";
|
||||||
|
|
||||||
pub async fn propagate_request_id_header(request: Request, next: Next) -> Response {
|
pub async fn propagate_request_id_header(request: Request, next: Next) -> Response {
|
||||||
let request_id = resolve_request_id(&request);
|
let request_id = resolve_request_id(&request);
|
||||||
@@ -19,5 +24,11 @@ pub async fn propagate_request_id_header(request: Request, next: Next) -> Respon
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Ok(header_value) = HeaderValue::from_str(API_VERSION) {
|
||||||
|
response
|
||||||
|
.headers_mut()
|
||||||
|
.insert(HeaderName::from_static(API_VERSION_HEADER), header_value);
|
||||||
|
}
|
||||||
|
|
||||||
response
|
response
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user