网络请求偶尔失败就让整个应用崩溃?一个智能的重试机制让你的应用在不稳定环境中依然稳如磐石! 在现代Web应用中,网络请求无处不在:调用API获取数据、上传文件、发送表单、实时通信等。...,包括不应该重试的(如400错误) 固定间隔容易造成"惊群效应" 没有考虑服务器负载情况 缺乏灵活性和可配置性 痛点二:没有指数退避 // 问题:大量客户端同时重试,加重服务器负担 async function...== 408) returntrue; // 4xx客户端错误 - 不重试 if (error.status >= 400 && error.status...限流重试: 第${attempt}次触发限流,${delay}ms后重试`); } else { console.log(` API请求重试: 第${attempt}...:智能判断哪些错误需要重试,哪些不需要 ✅ 详细监控:完整的重试过程监控和统计 强大功能: ✅ 指数退避算法:避免给服务器造成过大压力 ✅ 随机抖动:防止多客户端同时重试 ✅ 超时控制:防止单个请求占用过长时间
1、GET:读取(Read) 2、POST:新建(Create) 3、PUT:更新(Update) 4、PATCH:更新(Update),通常是部分更新 5、DELETE:删除(Delete) 根据 HTTP...HTTP/1.1 303 See Other Location: /api/orders/12345 2.4 4xx 状态码 4xx状态码表示客户端错误,主要有下面几种。...400 Bad Request:服务器不理解客户端的请求,未做任何处理。 401 Unauthorized:用户未提供身份验证凭据,或者没有通过身份验证。...比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式。 422 Unprocessable Entity :客户端上传的附件无法处理,导致请求失败。...429 Too Many Requests:客户端的请求次数超过限额。 2.5 5xx 状态码 5xx状态码表示服务端错误。
GET:读取(Read) POST:新建(Create) PUT:更新(Update) PATCH:更新(Update),通常是部分更新 DELETE:删除(Delete) 根据 HTTP 规范,动词一律大写...1xx:相关信息 2xx:操作成功 3xx:重定向 4xx:客户端错误 5xx:服务器错误 这五大类总共包含100多种状态码,覆盖了绝大部分可能遇到的情况。...HTTP/1.1 303 See Other Location: /api/orders/12345复制代码 2.4 4xx 状态码 4xx状态码表示客户端错误,主要有下面几种: 400 Bad...比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式 422 Unprocessable Entity :客户端上传的附件无法处理,导致请求失败 429 Too Many Requests...:客户端的请求次数超过限额。
GET:读取(Read) POST:新建(Create) PUT:更新(Update) PATCH:更新(Update),通常是部分更新 DELETE:删除(Delete) 根据 HTTP 规范,动词一律大写...HTTP/1.1 303 See Other Location: /api/orders/12345 2.4 4xx 状态码 4xx状态码表示客户端错误,主要有下面几种。...400 Bad Request:服务器不理解客户端的请求,未做任何处理。 401 Unauthorized:用户未提供身份验证凭据,或者没有通过身份验证。...比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式。 422 Unprocessable Entity :客户端上传的附件无法处理,导致请求失败。...429 Too Many Requests:客户端的请求次数超过限额。 2.5 5xx 状态码 5xx状态码表示服务端错误。
宾语必须是名词 宾语就是 API 的 URL,是 HTTP 动词作用的对象。它应该是名词,不能是动词。比如,/articles这个 URL 就是正确的,而下面的 URL 不是名词,所以都是错误的。...HTTP/1.1 303 See Other Location: /api/orders/12345 4xx 状态码 4xx状态码表示客户端错误,主要有下面几种。...400 Bad Request:服务器不理解客户端的请求,未做任何处理。 401 Unauthorized:用户未提供身份验证凭据,或者没有通过身份验证。...比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式。 422 Unprocessable Entity :客户端上传的附件无法处理,导致请求失败。...429 Too Many Requests:客户端的请求次数超过限额。 5xx 状态码 5xx状态码表示服务端错误。一般来说,API 不会向用户透露服务器的详细信息,所以只要两个状态码就够了。
1xx:相关信息 2xx:操作成功 3xx:重定向 4xx:客户端错误 5xx:服务器错误 这五大类总共包含100多种状态码,覆盖了绝大部分可能遇到的情况。...HTTP/1.1 303 See Other Location: /api/orders/12345 2.4 4xx 状态码 4xx状态码表示客户端错误,主要有下面几种。...400 Bad Request:服务器不理解客户端的请求,未做任何处理。 401 Unauthorized:用户未提供身份验证凭据,或者没有通过身份验证。...比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式。 422 Unprocessable Entity :客户端上传的附件无法处理,导致请求失败。...429 Too Many Requests:客户端的请求次数超过限额。 2.5 5xx 状态码 5xx状态码表示服务端错误。
2.4 4xx 状态码 4xx状态码表示客户端错误,主要有下面几种。 400 Bad Request:服务器不理解客户端的请求,未做任何处理。...比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式。 422 Unprocessable Entity :客户端上传的附件无法处理,导致请求失败。...429 Too Many Requests:客户端的请求次数超过限额。 2.5 5xx 状态码 5xx状态码表示服务端错误。...3.2 发生错误时,不要返回 200 状态码 有一种不恰当的做法是,即使发生错误,也返回200状态码,把错误信息放在数据体里面,就像下面这样。 ? 上面代码中,解析数据体以后,才能得知操作失败。...正确的做法是,状态码反映发生的错误,具体的错误信息放在数据体里面返回。下面是一个例子。 ? 3.3 提供链接 API 的使用者未必知道,URL 是怎么设计的。
GET :获取(Read) POST:新建 (Create) PUT:更新(Update) PATCH:更新(Update); 部分更新 DELETE:删除(Delete) 有一些客户端只能使用GET和...400 Bad Request:服务器不理解客户端的请求,未做任何处理。 401 Unauthorized:用户未提供身份验证凭据,或者没有通过身份验证。...比如,API只能返回JSON格式,但是客户端要求返回XML格式。 422 Unprocessable Entity:客户端上传的附件无法处理,导致请求失败。...429 Too Many Requests:客户端的请求次数超过限额。 5xx状态码 5xx状态码表示服务端错误。一般来说,API不会向用户透漏服务器的详细信息,所以只要两个状态就够了。...上面的代码中,解析数据体以后,才能得知操作失败。 这种做法实际上取消了状态码,这完全不可取的,正确的做法是,状态码反应发生的错误,具体的错误信息放在数据体里面返回。下面是一个例子。
HTTP状态码详解:从400到504的故障排查指南 引言 在现代Web开发和API交互中,HTTP状态码是客户端和服务器之间沟通的重要桥梁。它们不仅告诉我们请求是否成功,还能快速定位问题所在。...4xx(客户端错误):请求存在问题(如404 Not Found)。 5xx(服务器错误):服务器处理失败(如500 Internal Server Error)。...客户端错误(4xx) 2.1 400 Bad Request 含义:服务器无法理解客户端的请求,通常由于语法错误或参数问题。 常见原因: 请求参数缺失或格式错误(如JSON语法错误)。...常见原因: URL路径错误(如/api/users写成/api/user)。 资源已被删除或未发布。 服务器路由未正确配置。 示例代码(错误URL): GET /api/usr?...总结与最佳实践 4.1 状态码速查表 状态码 类型 含义 典型场景 400 客户端错误 请求语法错误 参数缺失、JSON格式错误 404 客户端错误 资源不存在 URL拼写错误 406 客户端错误 响应格式不匹配
、ASN 预检验证,避免目标端地域配置错误 [4]API 设计规范:JSON-first、统一错误模型请求示例GET https://gw.smartproxy.cn/v1/ips ?...(无效参数、鉴权失败、触发限速等)检查请求参数与权限5xx服务端异常或上游波动根据 retryable 标记决定是否重试强制要求:所有响应必须包含 trace-id,便于跨团队问题定位 [4]统一错误模型...、网关、目标站点三级限速智能重试策略核心原则:仅对 retryable=true 的错误执行重试指数退避序列:200ms → 400ms → 800ms → 1600ms,上限 3–5 次随机抖动:在退避时间基础上...:执行 TCP 握手、TLS 建立、关键路径探针检测多源交叉验证:结合自研数据库与第三方数据源,降低误判率失败分层处理前置校验失败:立即替换 IP,减少无效请求尝试目标端返回失败:根据错误类型选择重试或降级策略工程化稳态..." }}常见错误码映射表HTTP 状态码错误码可重试说明400INVALID_PARAM❌请求参数无效401UNAUTHORIZED❌未授权访问403FORBIDDEN❌权限不足404NOT_FOUND
宾语:URL 应该全部使用名词复数,可以有例外,比如搜索可以使用更加直观的 search 。 过滤信息(Filtering) 如果记录数量很多,API应该提供参数,过滤返回结果。 ?...API 主要是用303 See Other,表示参考另一个 URL。...HTTP/1.1 303 See Other Location: /api/orders/12345 4xx 状态码 4xx 状态码表示客户端错误,主要有下面几种: 400 Bad Request:服务器不理解客户端的请求...比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式。 422 Unprocessable Entity :客户端上传的附件无法处理,导致请求失败。...429 Too Many Requests:客户端的请求次数超过限额。 5xx 状态码 5xx状态码表示服务端错误。一般来说,API 不会向用户透露服务器的详细信息,所以只要两个状态码就够了。
想象一下,当你的支付系统因第三方API超时导致订单状态不一致,或因瞬时网络抖动造成用户操作失败,这些问题往往源于HTTP客户端缺乏完善的超时控制和重试策略。...Netflix的性能数据显示,将超时时间从30秒优化到5秒后,连接池利用率提升了400%,服务吞吐量增长2.3倍。...五、重试策略网络请求失败不可避免,但盲目重试可能加剧服务负载,甚至引发惊群效应。一个健壮的重试机制需要结合错误类型判断、退避算法和幂等性保证,在可靠性和服务保护间取得平衡。...3次,对429错误使用Retry-After头指定的间隔,对网络错误使用指数退避(初始100ms,最大5秒)。...的并发请求延迟从85ms降至12ms,吞吐量提升6倍。
集群发起请求 nebula-bench 整合了生成 LDBC 数据集,数据导入和压测。...[图片] checks 是校验请求是否执行成功,如果执行失败,会在 csv 中保存失败的错误消息。...的时候,就会错误产生。...min=0 max=400 vus_max..............: 400 min=400 max=400 awk -F ',' '{print...《开源分布式图数据库Nebula Graph完全指南》,又名:Nebula 小书,里面详细记录了图数据库以及图数据库 Nebula Graph 的知识点以及具体的用法,阅读传送门:https://docs.nebula-graph.com.cn
比如,/users是正确的,因为 URL 是名词,而下面就都是错误的了: /getUsers /createUsers /deleteUsers 1.3 建议复数 URL 因为 URL 是名词,没有单复数的限制...这边列举几个经常使用的状态码介绍: 303 See Other:表示参考另一个 URL。 400 Bad Request:服务器不理解客户端的请求,未做任何处理。...比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式。 422 Unprocessable Entity:客户端上传的附件无法处理,导致请求失败。...429 Too Many Requests:客户端的请求次数超过限额。 500 Internal Server Error:客户端请求有效,服务器处理时发生了意外。...正确的做法应该是在错误时,返回对应错误状态码,并将错误信息返回: HTTP/1.1 400 Bad Request Content-Type: application/json { "error"
,通过Body中开发者自定义的Code给API设置状态 最新 Restful API 风格 ResponseEntity 用法大全 用法一: //1....下面是常见的HTTP状态码: 200 - 请求成功 301 - 资源(网页等)被永久转移到其它URL 404 - 请求的资源(网页等)不存在 500 - 内部服务器错误...4** 客户端错误,请求包含语法错误或无法完成请求 5** 服务器错误,服务器在处理请求的过程中发生了错误 HTTP状态码列表: HTTP状态码列表 状态码 状态码英文名称 中文描述 100...使用GET请求重定向 400 Bad Request 客户端请求的语法错误,服务器无法理解 401 Unauthorized 请求要求用户的身份认证 402 Payment Required 保留,将来使用...的请求信息 412 Precondition Failed 客户端请求信息的先决条件错误 413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请 求。
比如,/users 是正确的,因为 URL 是名词,而下面就都是错误的了: /getUsers /createUsers /deleteUsers 1.3 建议复数 URL 因为 URL 是名词,没有单复数的限制...这边列举几个经常使用的状态码介绍: 303 See Other:表示参考另一个 URL。 400 Bad Request:服务器不理解客户端的请求,未做任何处理。...比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式。 422 Unprocessable Entity:客户端上传的附件无法处理,导致请求失败。...429 Too Many Requests:客户端的请求次数超过限额。 500 Internal Server Error:客户端请求有效,服务器处理时发生了意外。...正确的做法应该是在错误时,返回对应错误状态码,并将错误信息返回: HTTP/1.1 400 Bad Request Content-Type: application/json { "error"
今天我司线上kafka消息代理出现错误日志,异常rebalance,而且平均间隔2到3分钟就会rebalance一次,分析日志发现比较严重。...如果此超时时间期满之前poll()没有被再次调用,则消费者被视为失败,并且分组将重新平衡,以便将分区重新分配给别的成员。 ?...":"发券流程执 行成功"}, event:com.today.api.member.events.ConsumeFullEvent, url:https://wechat-lite.today36524...":"发券流程执 行成功"}, event:com.today.api.member.events.ConsumeFullEvent, url:https://wechat-lite.today36524...服务端约定了和客户端max.poll.interval.ms,两次poll最大间隔。如果客户端处理一批消息花费的时间超过了这个限制时间,服务端可能就会把消费者客户端移除掉,并触发rebalance。
CURL库的核心功能是通过简单的API调用,实现网络请求和数据传输。CURL库由两个主要部分组成:libcurl(CURL库)和curl(命令行工具)。...libcurl是一个跨平台的C语言库,提供了丰富的API用于网络通信,而curl命令行工具则是基于libcurl开发的,用于在终端中执行网络请求。...curl) { fprintf(stderr, "CURL实例创建失败: 内存分配错误"); exit(EXIT_FAILURE);}在初始化失败时立即终止程序,避免后续操作引发段错误。...= 200) { analyze_http_error(http_code);}状态码验证应区分客户端错误(4xx)和服务端错误(5xx)。...句柄降低TCP握手开销实现keep-alive连接保持CURLM *multi_handle = curl_multi_init();// 添加多个easy_handle实现并行5.2 智能重试机制基于错误类型的差异化重试策略动态退避算法设计失败请求的隔离处理
API接口的资源应始终为复数,如果我们要访问资源的一个实例,我们可以在URL中传递id或者name之类的。...URL是说白了,就是一个句子,其中资源是名词,HTTP方法是动词。 GET 方法从资源请求数据,不应产生任何其他作用。...6 使用HTTP状态码 当客户端通过API向服务器发出请求时,客户端应该知道反馈,无论是失败,成功还是请求错误。 HTTP状态代码是一系列标准化代码,针对http请求的可能会发生的各种情况。...4xx(客户端错误类别) 这些状态代码表示客户端已提出错误请求。 400 Bad Request表示未处理客户端的请求,因为服务器无法理解客户端要求的内容。...比如401表示用户身份认证失败,403表示你验证身份通过了,但是无权限操作资源。 在此,祝大家设计出优秀的Restful API!