From 3800d5fbb61c3f87937bf2c1a7d0762278c94db9 Mon Sep 17 00:00:00 2001 From: chakcy <947105045@qq.com> Date: Fri, 14 Aug 2026 16:17:37 +0800 Subject: [PATCH] =?UTF-8?q?modify:=20call=20=E6=9E=84=E9=80=A0=E4=BF=A1?= =?UTF-8?q?=E5=B0=81=E5=8D=8F=E8=AE=AE=EF=BC=88=E4=B8=8D=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E6=96=B9=20payload=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- src/chongming_request/client.py | 13 +++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7c72db9..4134f14 100644 --- a/README.md +++ b/README.md @@ -42,10 +42,14 @@ async with Client(session=zenoh_session) as client: | `session` | `zenoh.Session` | Zenoh 会话对象 | | `worker_type` | `str` | Worker 类型名(如 `"example"`) | | `subject` | `str` | Zenoh 主题(如 `"example.add"`) | -| `payload` | `dict` | 调用载荷 | +| `payload` | `dict` | 业务参数(自动封装为信封) | | `method` | `str` | HTTP 方法(`"GET"` / `"POST"`) | | `timeout` | `float` | 超时时间(秒) | +> **信封协议**:`call()` 会把 `payload` 自动封装为 +> `{"meta": {"method": ...}, "data": payload}` 发送,**不再修改调用方传入的 dict**; +> 若传入的 `payload` 已含 `meta`/`data` 结构则原样复用(仅补 `meta.method`)。 + ### 同步调用 ```python diff --git a/src/chongming_request/client.py b/src/chongming_request/client.py index e77a8a6..295b4c3 100644 --- a/src/chongming_request/client.py +++ b/src/chongming_request/client.py @@ -52,7 +52,16 @@ class Client: timeout: float = 3.0, retries: int = 1, ) -> Dict[str, Any]: - payload.setdefault("_method", method.upper()) + # 信封协议: {"meta": {...}, "data": {...}},不修改调用方的 payload。 + # 若调用方已传信封结构则复用,仅补充 meta.method。 + if isinstance(payload, dict) and ("meta" in payload or "data" in payload): + envelope = { + "meta": dict(payload.get("meta") or {}), + "data": payload.get("data") or {}, + } + envelope["meta"].setdefault("method", method.upper()) + else: + envelope = {"meta": {"method": method.upper()}, "data": payload} full_key = "" for attempt in range(retries + 1): workers = await self._get_workers(worker_type) @@ -63,7 +72,7 @@ class Client: try: reply_iter = self._session.get( full_key, - payload=orjson.dumps(payload), + payload=orjson.dumps(envelope), consolidation=zenoh.ConsolidationMode.NONE, ) def _get_first(iterator):