在 Coze 的 SDK 或 API 调用中,AsyncTokenAuth
和 TokenAuth
都是用于处理令牌认证的工具,但核心差异体现在同步/异步场景的适配上,具体使用差异如下:
1. 适用的编程模型不同
-
TokenAuth
:是同步版本 的认证器,适用于同步编程模型 (如使用requests
等同步 HTTP 库)。它通常配合同步的 API 调用方法,在普通的同步函数中使用,无需考虑异步语法(如
async/await
)。 -
AsyncTokenAuth
:是异步版本 的认证器,适用于异步编程模型 (如使用aiohttp
等异步 HTTP 库)。它必须在异步函数(
async def
)中使用,且需要配合await
语法调用异步 API 方法。
2. 与 HTTP 客户端的适配不同
-
TokenAuth
:通常与同步 HTTP 客户端 (如requests
)搭配使用,实现方式是通过重写同步认证逻辑(如requests.auth.AuthBase
的__call__
方法),在请求发送前自动添加令牌头(如Authorization: Bearer <token>
)。示例(伪代码):
pythonimport requests from coze import TokenAuth auth = TokenAuth(token="your_token") response = requests.get("https://api.coze.com/endpoint", auth=auth)
-
AsyncTokenAuth
:通常与异步 HTTP 客户端 (如aiohttp
)搭配使用,实现方式是通过重写异步认证逻辑(如aiohttp.BasicAuth
的异步版本),在异步请求发送前添加令牌头。示例(伪代码):
pythonimport aiohttp from coze import AsyncTokenAuth async def fetch(): auth = AsyncTokenAuth(token="your_token") async with aiohttp.ClientSession(auth=auth) as session: async with session.get("https://api.coze.com/endpoint") as response: return await response.json()
3. 内部实现逻辑的差异
-
两者核心功能(添加令牌认证头)一致,但
AsyncTokenAuth
的内部方法是异步的 (可能包含异步的令牌刷新逻辑,如需要动态获取/刷新令牌时),而TokenAuth
的方法是同步的。 -
若 Coze 存在令牌过期自动刷新机制,
AsyncTokenAuth
的刷新逻辑会使用异步 HTTP 调用(如await session.post(...)
),而TokenAuth
会使用同步调用(如requests.post(...)
)。
总结
选择哪一个取决于你的代码是同步还是异步:
- 同步代码(如使用
requests
)→ 用TokenAuth
; - 异步代码(如使用
aiohttp
)→ 用AsyncTokenAuth
。
两者的认证逻辑(如令牌格式、传递方式)一致,仅适配的编程模型和 HTTP 客户端不同。