fix: 完善转换代理行为
This commit is contained in:
@@ -23,6 +23,70 @@
|
||||
- **THEN** `error` 字段 SHALL 包含人类可读的错误描述
|
||||
- **THEN** `code` 字段 SHALL 包含机器可读的错误代码(可选)
|
||||
|
||||
### Requirement: 网关层代理错误使用应用统一格式
|
||||
|
||||
系统 SHALL 对代理接口中由网关自身产生的错误使用应用统一错误响应格式。
|
||||
|
||||
#### Scenario: 标准网关错误格式
|
||||
|
||||
- **WHEN** 代理接口返回网关层错误
|
||||
- **THEN** SHALL 使用以下 JSON 格式:
|
||||
```json
|
||||
{
|
||||
"error": "错误描述",
|
||||
"code": "ERROR_CODE"
|
||||
}
|
||||
```
|
||||
- **THEN** `error` 字段 SHALL 包含人类可读的错误描述
|
||||
- **THEN** `code` 字段 SHALL 包含机器可读的错误码
|
||||
|
||||
#### Scenario: 网关错误码集合
|
||||
|
||||
- **WHEN** 代理接口返回网关层错误
|
||||
- **THEN** code SHALL 使用以下枚举之一:`INVALID_JSON`、`INVALID_REQUEST`、`INVALID_MODEL_ID`、`MODEL_NOT_FOUND`、`PROVIDER_NOT_FOUND`、`UNSUPPORTED_INTERFACE`、`UNSUPPORTED_MULTIMODAL`、`CONVERSION_FAILED`、`UPSTREAM_UNAVAILABLE`
|
||||
|
||||
### Requirement: 代理接口上游错误透传
|
||||
|
||||
系统 SHALL 对代理接口中已经收到的上游 HTTP 错误响应执行透明透传。
|
||||
|
||||
#### Scenario: 非流式上游非 2xx 响应
|
||||
|
||||
- **WHEN** 非流式代理请求收到上游 HTTP 响应且状态码不是 2xx
|
||||
- **THEN** SHALL 透传上游 status code
|
||||
- **THEN** SHALL 透传过滤 hop-by-hop header 后的上游 headers
|
||||
- **THEN** SHALL 透传上游 body
|
||||
- **THEN** SHALL NOT 将上游错误包装为应用统一错误
|
||||
- **THEN** SHALL NOT 将上游错误转换为客户端协议错误格式
|
||||
|
||||
#### Scenario: 流式上游非 2xx 响应
|
||||
|
||||
- **WHEN** 流式代理请求收到上游 HTTP 响应且状态码不是 2xx
|
||||
- **THEN** SHALL 透传上游 status code
|
||||
- **THEN** SHALL 透传过滤 hop-by-hop header 后的上游 headers
|
||||
- **THEN** SHALL 透传上游 body
|
||||
- **THEN** SHALL NOT 创建 StreamConverter
|
||||
|
||||
### Requirement: 上游不可达错误
|
||||
|
||||
系统 SHALL 在没有收到上游 HTTP 响应时返回网关层错误。
|
||||
|
||||
#### Scenario: 上游连接失败
|
||||
|
||||
- **WHEN** ProviderClient 因 DNS、连接失败、TLS、超时或上下文取消等原因无法获得上游 HTTP 响应
|
||||
- **THEN** SHALL 返回 HTTP 502 或合适的 5xx 状态码
|
||||
- **THEN** SHALL 返回应用统一错误格式
|
||||
- **THEN** code SHALL 为 `UPSTREAM_UNAVAILABLE`
|
||||
|
||||
### Requirement: Hop-by-hop header 过滤
|
||||
|
||||
系统 SHALL 在透传上游错误响应时过滤 hop-by-hop headers。
|
||||
|
||||
#### Scenario: 过滤连接级 header
|
||||
|
||||
- **WHEN** 透传上游错误响应 headers
|
||||
- **THEN** SHALL 过滤 `Connection`、`Transfer-Encoding`、`Keep-Alive`、`Proxy-Authenticate`、`Proxy-Authorization`、`TE`、`Trailer`、`Upgrade`
|
||||
- **THEN** SHALL 保留 `Content-Type` 等普通响应 header
|
||||
|
||||
### Requirement: 前端提取并处理错误码
|
||||
|
||||
前端 SHALL 提取后端结构化错误响应中的错误码并用于错误处理。
|
||||
@@ -212,7 +276,7 @@
|
||||
|
||||
#### Scenario: 请求体 JSON 格式错误
|
||||
|
||||
- **WHEN** 代理请求的请求体不是有效的 JSON 格式
|
||||
- **WHEN** 代理请求的请求体不是有效的 JSON 格式,且该接口需要网关解析请求体
|
||||
- **THEN** SHALL 返回 HTTP 400 Bad Request
|
||||
- **THEN** SHALL 返回以下 JSON 格式:
|
||||
```json
|
||||
|
||||
Reference in New Issue
Block a user