网络有时会中断请求,您无法确定它是否已送达。要重试 POST 而不重复执行(和支付)工作,请发送 Idempotency-Key 请求头:每个逻辑操作一个唯一值。UUID 是不错的选择。
curl -X POST https://developers.grem.capital/api/v1/valuation/express \
-H "Authorization: Bearer gsk_live_xxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 3f1c8a90-1e2b-4c77-9a10-2b6d0f9e4a11" \
-d '{"propertyCategory":"apartment","addressText":"Torstraße 12, Berlin","totalArea":64}'
工作原理
- 使用某个键的第一个请求正常执行;其成功响应会被保存。
- 使用同一个键的重试返回已保存的响应:工具不会再次运行,也不会再次扣费。
- 第一个请求仍在执行时,使用同一个键的第二个请求会收到带
title: idempotency_conflict的409。请等待并用同一个键重试。 - 如果第一个请求以错误结束,该键会被释放:重试会重新执行。根本没有到达服务的请求(连接被拒绝)也会释放该键。
- 工具、创建房源或创建线索超时(
502 provider_error)后,该键会保留 15 分钟,避免重试再次执行工作。重试前请先查看结果:工具看GET /works,创建看GET /objects和GET /leads。照片优化、网站和草稿的结果不会保存在GET /works中,请在后台或您的房源中查看。15 分钟后重试会再次执行工作(并再次扣费)。 - 快速估价例外:超时后该键会被释放,请立即用同一个键重试,已完成的估价会直接返回,完全免费:估价和 API 调用都不会再次扣费。
- 键保存 24 小时,归属于您的 API 密钥和操作,即方法和实际路径:不同 API 密钥下的相同值、同一个键用于其他工具,以及
POST /objects/property与POST /objects/rental,都是不同的请求。
重试的请求体不会与第一个请求比较。如果用已经用过的键发送不同的请求,您会收到第一个请求的响应。每个新操作请使用新键。
适用范围
| 请求 | |
|---|---|
POST /valuation/express 及所有工具(POST /valuation/report、POST /content/generate、POST /flyer/create 等) | 是 |
POST /objects/{kind}:创建房源 | 是 |
POST /leads:创建线索 | 是 |
POST /match/leads/{id}/events:Swipe Match 事件 | 是;键必须符合 ^[A-Za-z0-9_.:-]{8,128}$,否则会被忽略 |
POST /uploads、POST /chat/messages、POST /valuation/review/jobs/{id}/confirm | 否(对话中由 clientMessageId 承担此作用) |
在 SDK 中,键是方法的最后一个参数。