aptx-api-plugin-retry
14
总安装量
6
周安装量
#23108
全站排名
安装命令
npx skills add https://github.com/haibaraaiaptx/aptx-skill --skill aptx-api-plugin-retry
Agent 安装分布
opencode
6
claude-code
6
github-copilot
6
codex
6
kimi-cli
6
gemini-cli
6
Skill 文档
aptx-api-plugin-retry
å®è£
pnpm add @aptx/api-plugin-retry
API æ¥å£
interface RetryOptions {
retries: number; // éè¯æ¬¡æ°ï¼ä¸å«é¦æ¬¡è¯·æ±ï¼
delayMs?: number | ((attempt: number, error: Error, req: Request, ctx: Context) => number);
retryOn?: (error: Error, req: Request, ctx: Context) => boolean;
}
function createRetryMiddleware(options: RetryOptions): Middleware;
忬¡è°ç¨è¦çï¼Per-call Overrideï¼
@aptx/api-plugin-retry æ¯æéè¿ req.meta.__aptxRetry 坹忬¡è°ç¨è¦çéè¯è¡ä¸ºï¼æ éå¨è¿è¡æ¶å±éå¤å®ç°éè¯é»è¾ï¼ã
// ç¦ç¨æ¬æ¬¡è°ç¨éè¯
meta: { __aptxRetry: { retries: 0 } }
// ææ¾å¼ disableï¼ä¼å
级æé«ï¼
meta: { __aptxRetry: { disable: true } }
è§åï¼
- override åªå½±åå½å
Requestã - è¥åæ¶é
ç½®äºå
¨å±
createRetryMiddleware({ retries })ï¼override 以req.meta.__aptxRetry为åã - 建议çæå¨å°è£
ä¸ä¸ª helperï¼ä¾å¦
retryMeta({ retries: 0 })ï¼é¿å ä¸å¡ç´æ¥å鿳忮µã
åæ°è¯´æ
- retries: éè¯æ¬¡æ°ï¼
retries: 2表示æ»å°è¯æ¬¡æ° = 馿¬¡è¯·æ± + 2次éè¯ = 3次 - delayMs: åºå®å»¶è¿æå¨æå»¶è¿å½æ°ï¼å½æ°æ¥æ¶
(attempt, error, req, ctx)åä¸ªåæ° - retryOn: 夿æ¯å¦éè¯ç彿°ï¼æ¥æ¶
(error, req, ctx)ä¸ä¸ªåæ°
ctx.attempt è¯ä¹
- 馿¬¡è¯·æ±æ¶
ctx.attempt = 0 - æ¯æ¬¡éè¯åéå¢ï¼ç¬¬ä¸æ¬¡éè¯
ctx.attempt = 1ï¼ - å½
ctx.attempt === retriesæ¶ä¸ºæå䏿¬¡å°è¯ - å¯ç¨äºå®ç°”ä» å¨é¦æ¬¡å¤±è´¥æ¶é诔çé»è¾
卿¥å ¥éè¯æä»¶æ¶ï¼æä»¥ä¸æ¥éª¤æ§è¡ï¼
- 使ç¨
createRetryMiddleware({ retries, delayMs, retryOn })å¹¶éè¿client.use()æè½½å°RequestClientãéè¯ä¸é´ä»¶åºä½äºç®¡éå端ã - æç¡®
retryOnè§åï¼å©ç¨req.methodãreq.urlçä¸ä¸æä¿¡æ¯ï¼é¿å 对ä¸å¡é误æä¸å¯éè¯è¯·æ±æ å·®å«éè¯ã - æææ°éé¿ãæå¨çç¥æ¾å°
delayMs彿°éå®ç°ï¼ä¸ä¿®æ¹ coreã - ä¿æ
ctx.attemptå¯è§æµï¼ä¾¿äºå®ä½éè¯é¾è·¯ã - 卿µè¯ä¸è¦çæåéè¯ãæ¾å¼éè¯ãå»¶è¿éè¯ä¸ç±»åºæ¯ã
æå°æ¨¡æ¿ï¼
import { createRetryMiddleware } from "@aptx/api-plugin-retry";
const retry = createRetryMiddleware({
retries: 2, // æ»å
± 3 次å°è¯ï¼é¦æ¬¡ + 2 次éè¯ï¼
delayMs: (attempt, error, req, ctx) => attempt * 200, // å¯ä½¿ç¨ req å ctx ä¿¡æ¯
retryOn: (error, req, ctx) => {
// ä»
对ç½ç»é误æè¶
æ¶éè¯
const shouldRetry = error.name === "NetworkError" || error.name === "TimeoutError";
// å¯å©ç¨è¯·æ±ä¸ä¸æå¤æï¼GET 请æ±å¯éè¯ï¼POST ä¸éè¯
return shouldRetry && req.method === "GET";
},
});
// æè½½å°å®¢æ·ç«¯ï¼éè¯ä¸é´ä»¶åºä½äºç®¡éå端ï¼
client.use(retry);
è¡ä¸ºè¯´æ
- å»¶è¿å¤ç:
delayMs为 undefined æ 0 æ¶æ å»¶è¿ï¼è´å¼è§ä¸º 0 - éè¯¯ä¼ æ: ææéè¯èå°½åï¼æåºåå§éè¯¯ï¼æªä¿®æ¹ï¼
- éè¯æ¬¡æ°:
retries < 0ä¼èªå¨ clamp 为 0
é£é©æ§å¶
- ç¦æ¢å¯¹ææé误æ å·®å«éè¯ï¼ä»
å¨
retryOn满足æ¡ä»¶æ¶éè¯ï¼å¦ NetworkErrorãTimeoutErrorã5xx ç¶æç ï¼ã - éå¹çå请æ±é»è®¤ä¸éè¯ï¼å¦æ¯ä»ãåå»ºèµæºç POST/PUT 请æ±ï¼é¤éä¸å¡æç¡®å 许ã
- éè¯æ¬¡æ°æ§å¶ï¼ç产ç¯å¢å»ºè®®
retries <= 3ï¼é¿å 级èéªå´©ã - è¶
æ¶è®¾ç½®ï¼é
å
req.timeout使ç¨ï¼é¿å æ éçå¾ ã - 管é顺åºï¼éè¯ä¸é´ä»¶åºæè½½å¨ç®¡éå端ï¼å¨è¯·æ±ååºåæè·å¤±è´¥ã