docs: remove deprecated UAPI class from documentation

This commit is contained in:
yumoqing 2026-05-11 18:22:16 +08:00
parent 5189abf931
commit 619399d250

View File

@ -24,8 +24,8 @@ uapi/
├── uapi/ # Python 源码包 ├── uapi/ # Python 源码包
│ ├── __init__.py # 空 │ ├── __init__.py # 空
│ ├── init.py # 模块初始化,注册函数到 ServerEnv │ ├── init.py # 模块初始化,注册函数到 ServerEnv
│ ├── appapi.py # UAPI 核心类 + deerer/bearer 认证 │ ├── appapi.py # deerer/bearer 认证 + 辅助查询函数
│ ├── uapi.py # UpAppApi 类(基于 UAPIData 缓存的版本 │ ├── uapi.py # UpAppApi 类(API 调用核心类
│ ├── apidata.py # UAPIData 单例缓存 │ ├── apidata.py # UAPIData 单例缓存
│ └── uptask.py # 异步长任务管理 │ └── uptask.py # 异步长任务管理
├── json/ # CRUD 定义bricks-framework ├── json/ # CRUD 定义bricks-framework
@ -88,7 +88,6 @@ upapp (上位系统) ──1:N──> upappkey (API密钥)
```python ```python
def load_uapi(): def load_uapi():
g = ServerEnv() g = ServerEnv()
g.UAPI = UAPI
g.UpAppApi = UpAppApi g.UpAppApi = UpAppApi
g.uapi_data = UAPIData() g.uapi_data = UAPIData()
g.get_deerer = get_deerer g.get_deerer = get_deerer
@ -105,50 +104,37 @@ def load_uapi():
其他模块的 `.dspy` 文件可通过 `globals()` 直接使用这些函数。 其他模块的 `.dspy` 文件可通过 `globals()` 直接使用这些函数。
### UAPI 类appapi.py ### UpAppApi 类uapi.py
**直接查数据库调用外部 API 的核心类。** **基于 UAPIData 缓存的 API 调用类。**
```python ```python
# 在 .dspy 中使用 # 在 .dspy 中使用
uapi = UAPI(request, DictObject(**globals())) api = UpAppApi(request)
# 调用方式 1流式调用返回生成器 # 调用方式 1流式调用返回生成器
async for chunk in uapi(upappid, apiname, callerid, params={}): async for chunk in api(upappid, apiname, callerid, params={}):
# chunk 是 bytes # chunk 是 bytes
# 调用方式 2一次性获取全部响应 # 调用方式 2一次性获取全部响应
result = await uapi.call(upappid, apiname, callerid, params={}) result = await api.call(upappid, apiname, callerid, params={})
# result 是 bytes # result 是 bytes
# 调用方式 3逐行流式处理自动过滤 chunk_match 前缀) # 调用方式 3逐行流式处理自动过滤 chunk_match 前缀)
async for line in uapi.stream_linify(upappid, apiname, callerid, params={}): async for line in api.stream_linify(upappid, apiname, callerid, params={}):
# line 是 str已去除 chunk_match 前缀,经 response 模板渲染 # line 是 str已去除 chunk_match 前缀,经 response 模板渲染
``` ```
**构造参数:** **构造参数:**
- `request`: HTTP 请求对象(可选,用于获取运行时命名空间) - `request`: HTTP 请求对象(可选,用于获取运行时命名空间)
- `env`: DictObject 环境变量(可选,默认从 ServerEnv 获取)
- `sor`: sqlor 游标(可选,传入后不再自行创建数据库连接)
**工作流程:** **工作流程:**
1. 通过 `sor_get_uapi()` 查询 uapi/upapp/uapiset 三表获取 API 配置 1. 通过 `UAPIData` 获取 API 定义(内存缓存,不直接查库)
2. 如果 API 定义了 `auth_apiname`,先执行认证 API`do_auth`),将结果注入 `self.env` 2. 如果 API 定义了 `auth_apiname`,先执行认证 API`do_auth`),将结果注入 `self.env`
3. 通过 `get_userapikey()` 获取调用者的 API 密钥信息 3. 通过 `get_userapikey()` 获取调用者的 API 密钥信息
4. 渲染 path/headers/data/params 模板,组装 HTTP 请求 4. 渲染 path/headers/data/params 模板,组装 HTTP 请求
5. 如果配置了 `dynamic_func_name`,执行动态函数 5. 如果配置了 `dynamic_func_name`,执行动态函数
6. 通过 `StreamHttpClient` 发起 HTTP 请求并流式返回 6. 通过 `StreamHttpClient` 发起 HTTP 请求并流式返回
### UpAppApi 类uapi.py
**基于 UAPIData 缓存的 API 调用类,接口与 UAPI 完全一致。**
区别在于UAPI 每次都查数据库UpAppApi 通过 UAPIData 单例缓存 API 定义和密钥信息,适合高频调用场景。
```python
# 在 .dspy 中使用
api = UpAppApi(request)
result = await api.call(upappid, apiname, callerid, params={})
``` ```
### UAPIData 类apidata.py ### UAPIData 类apidata.py
@ -277,7 +263,7 @@ import asyncio
from appPublic.jsonConfig import getConfig from appPublic.jsonConfig import getConfig
from sqlor.dbpools import DBPools from sqlor.dbpools import DBPools
from ahserver.serverenv import ServerEnv from ahserver.serverenv import ServerEnv
from uapi.appapi import UAPI from uapi.uapi import UpAppApi
def get_module_dbname(mn): def get_module_dbname(mn):
return 'sage' return 'sage'
@ -289,7 +275,7 @@ async def main():
env = ServerEnv() env = ServerEnv()
env.get_module_dbname = get_module_dbname env.get_module_dbname = get_module_dbname
uapi = UAPI() api = UpAppApi()
params = { params = {
'baseurl': 'https://qianfan.baidubce.com', 'baseurl': 'https://qianfan.baidubce.com',
'model': 'deepseek-v3', 'model': 'deepseek-v3',
@ -297,7 +283,7 @@ async def main():
} }
upapiid = 'R47xUJay76dCCt1sLmWvE' upapiid = 'R47xUJay76dCCt1sLmWvE'
async for line in uapi.stream_linify(upapiid, '0', callerid, params=params): async for line in api.stream_linify(upapiid, '0', callerid, params=params):
print(line) print(line)
if __name__ == '__main__': if __name__ == '__main__':
@ -389,14 +375,13 @@ xls2ui -m ../models -o ../wwwroot uapi *.json
## 关键设计要点 ## 关键设计要点
1. **双调用路径**UAPI直接查库和 UpAppApi缓存版提供相同接口按需选择 1. **模板引擎渲染**path/headers/data/params/response 全部支持模板语法,可在配置中动态组装
2. **模板引擎渲染**path/headers/data/params/response 全部支持模板语法,可在配置中动态组装 2. **流式响应支持**:通过 `StreamHttpClient``stream_linify` 支持 SSE 场景(如 LLM API
3. **流式响应支持**:通过 `StreamHttpClient``stream_linify` 支持 SSE 场景(如 LLM API 3. **chunk_match 过滤**:自动去除流式响应中的前缀行(如 `data:`),只提取有效数据
4. **chunk_match 过滤**:自动去除流式响应中的前缀行(如 `data:`),只提取有效数据 4. **response 模板**:可定义响应数据转换模板,将上游 JSON 映射为前端需要的格式
5. **response 模板**:可定义响应数据转换模板,将上游 JSON 映射为前端需要的格式 5. **AES 加密密钥**`secretkey` 在数据库中 AES 加密存储,运行时通过 `password_decode()` 解密
6. **AES 加密密钥**`secretkey` 在数据库中 AES 加密存储,运行时通过 `password_decode()` 解密 6. **Deerer 认证**:自定义认证头,时间戳 + apikey AES 加密,防重放攻击
7. **Deerer 认证**:自定义认证头,时间戳 + apikey AES 加密,防重放攻击 7. **动态函数扩展**`dynamic_func` 允许在 HTTP 请求前执行自定义逻辑(通过 RegisterFunction
8. **动态函数扩展**`dynamic_func` 允许在 HTTP 请求前执行自定义逻辑(通过 RegisterFunction
--- ---
@ -419,4 +404,3 @@ uapi
3. **密钥解密**:从数据库读取的 apikey/secretkey 必须通过 `password_decode()` 解密 3. **密钥解密**:从数据库读取的 apikey/secretkey 必须通过 `password_decode()` 解密
4. **模板渲染异常**headers/body 模板渲染后需 json.loads 验证,渲染失败会抛出异常 4. **模板渲染异常**headers/body 模板渲染后需 json.loads 验证,渲染失败会抛出异常
5. **uptask 回调**convert_func 返回 None 时会抛异常,必须返回包含 status 字段的字典 5. **uptask 回调**convert_func 返回 None 时会抛异常,必须返回包含 status 字段的字典
6. **UAPI 与 UpAppApi 选择**:低频调用用 UAPI每次查库确保最新高频调用用 UpAppApi缓存