API Key 一枚即可调用决策接口;Java / Python / Go 零依赖示例开箱即用; 事件驱动场景开启 Webhook 回调,HMAC-SHA256 签名保证来源可信。
POST /api/v1/decision/{modelCode},X-Api-Key 认证,毫秒级返回决策/得分/原因码/动作。
Java 11+ / Python 3.8+ / Go 1.20+ 三语言示例仅用标准库,复制即用,仓库 examples/ 目录。
决策完成异步推送结果摘要,失败自动重试 3 次,控制台可查投递状态与连续失败计数。
IP 白名单(支持 CIDR)、按 Key 速率限制、时间戳+Nonce 防重放、HMAC 回调验签。
系统管理 → API Key 新建凭证(可配置限速 / IP 白名单 / 过期时间),然后一行 curl 验证连通。
curl -X POST https://radar.example.com/api/v1/decision/loan_test \ -H "X-Api-Key: radar-xxxxxxxx" \ -H "Content-Type: application/json" \ -d '{"requestId":"order-10086-1","eventData":{"amount":12000,"age":30}}' # 响应(R<T> 统一包装) { "success": true, "data": { "decision": "REVIEW", // PASS / REVIEW / REJECT "score": 95.0, "reasonCode": "MK_003", "hitPolicies": [ ... ], "actions": [ ... ], "durationMs": 69 } }
三个语言的完整可运行示例随仓库提供(examples/),均只依赖标准库并内置防重放头。 此处以 Python 为例:
import json, os, secrets, time, urllib.request BASE_URL = os.environ["RADAR_BASE_URL"] API_KEY = os.environ["RADAR_API_KEY"] def decide(model, event_data, request_id): payload = json.dumps({"requestId": request_id, "eventData": event_data}).encode() req = urllib.request.Request(f"{BASE_URL}/api/v1/decision/{model}", data=payload, method="POST", headers={ "Content-Type": "application/json", "X-Api-Key": API_KEY, "X-Timestamp": str(int(time.time() * 1000)), # 防重放 "X-Nonce": secrets.token_hex(8), }) with urllib.request.urlopen(req, timeout=5) as resp: return json.load(resp)["data"] result = decide("loan_test", {"amount": 12000, "age": 30}, "order-10086-1") print(result["decision"], result["score"], result["reasonCode"])
examples/java/RadarDecisionClient.java(java.net.http.HttpClient)examples/go/radar_client.go(net/http + encoding/json)examples/python/radar_client.py(urllib)系统管理 → Webhook 通知:配置回调地址与签名密钥,点「发送测试」验证连通。 决策完成后自动 POST 结果摘要(不含入参明细,敏感数据不出域)。
import hmac, hashlib # 请求头:X-Radar-Signature: sha256=<hex(HMAC-SHA256(secret, raw_body))> expected = "sha256=" + hmac.new( secret.encode(), raw_body, hashlib.sha256).hexdigest() assert hmac.compare_digest(expected, request.headers["X-Radar-Signature"]) # 建议以 requestId 幂等去重(推送在极端情况下可能重复)
DECISION_COMPLETED(结果摘要:requestId / decision / score / reasonCode / durationMs)