[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-api-rate-limiting-zh-CN":3,"blog-adjacent-api-rate-limiting-zh-CN":28,"blog-related-api-rate-limiting-zh-CN":65},{"id":4,"slug":5,"title":6,"excerpt":7,"content":8,"cover":9,"tone":10,"author":11,"publishedAt":12,"updatedAt":12,"readingMinutes":13,"featured":14,"tags":15,"category":19,"seoSettings":27},46,"api-rate-limiting","接口限流：先保护自己再谈体验","限流不是为了拦用户，而是为了让系统在异常流量下还能服务大多数人。","\u003Cp>很多系统直到被打挂才想起限流。常见的触发场景有三种：第三方接口回调集中重试、某个客户端脚本死循环、活动期间真实流量突增。前两种是异常，第三种是业务。\u003C\u002Fp>\n\u003Ch2>限流放在哪一层\u003C\u002Fh2>\n\u003Cp>网关层做全局限流，挡住明显异常的流量，配置简单，适合作为第一道防线。\u003C\u002Fp>\n\u003Cp>服务层做业务限流，比如同一账号每分钟最多提交几次，与业务语义绑定更紧密。\u003C\u002Fp>\n\u003Cp>数据库层做保护，连接池上限和慢查询超时是最后的安全网，不能依赖它做常规限流。\u003C\u002Fp>\n\u003Ch2>阈值怎么定\u003C\u002Fh2>\n\u003Cp>先用监控数据看正常峰值，再留两到三倍余量。凭直觉设阈值，不是太松就是误伤。\u003C\u002Fp>\n\u003Cp>限流触发时返回明确的状态码和重试时间，让客户端知道该怎么办，而不是直接超时。\u003C\u002Fp>\n\u003Cp>把限流事件记进日志并做趋势统计，频繁触发说明容量或设计需要调整。\u003C\u002Fp>\n\u003Cp>限流的价值在于把故障控制在局部。一个接口被打挂，不应该让整个系统跟着不可用。\u003C\u002Fp>","","blue","佳益方圆团队","2026-04-08T09:28:00+08:00",1,false,[16,17,18],"接口","稳定性","运维",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":10,"kind":25,"sortOrder":26,"count":20},0,"engineering","技术专栏","架构设计、性能优化、AI 集成与跨端方案等一线技术实践，由研发团队持续分享。","cpu","article",60,{},{"previous":29,"next":47},{"id":30,"slug":31,"title":32,"excerpt":33,"content":9,"cover":9,"tone":34,"author":11,"publishedAt":35,"updatedAt":35,"readingMinutes":13,"featured":14,"tags":36,"category":40},25,"referral-compounding","口碑的复利","一个满意的客户会带来下一个，但前提是他能说清楚你究竟解决了什么问题。","teal","2026-04-10T16:15:00+08:00",[37,38,39],"创业","口碑","客户关系",{"id":41,"parentId":20,"slug":42,"name":43,"description":44,"icon":45,"cover":9,"tone":10,"kind":25,"sortOrder":46,"count":20},6,"founder-notes","创业手记","创始团队在经营、管理与产品上的思考，记录一家软件公司的成长过程。","pen-tool",10,{"id":48,"slug":49,"title":50,"excerpt":51,"content":9,"cover":9,"tone":52,"author":11,"publishedAt":53,"updatedAt":53,"readingMinutes":13,"featured":14,"tags":54,"category":58},66,"docs-for-future-self","产品文档写给未来的自己","文档不是交付物，而是团队的记忆。没人看的文档，通常是因为写错了对象。","indigo","2026-04-06T09:28:00+08:00",[55,56,57],"文档","团队","产品方法",{"id":59,"parentId":20,"slug":60,"name":61,"description":62,"icon":63,"cover":9,"tone":10,"kind":25,"sortOrder":64,"count":20},2,"product-thinking","产品思维","需求分析、用户体验与产品设计方法论，以及从业务问题到产品方案的思考过程。","lightbulb",50,[66,77,88],{"id":67,"slug":68,"title":69,"excerpt":70,"content":9,"cover":9,"tone":71,"author":11,"publishedAt":72,"updatedAt":72,"readingMinutes":13,"featured":14,"tags":73,"category":76},30,"integration-api-pitfalls","企业系统集成：接口对接最容易踩的五个坑","接口文档写得再全，真正对接时仍然会卡在字段约定、超时和重复推送这些细节上。","cyan","2026-10-17T09:00:00+08:00",[74,16,75],"系统集成","工程实践",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":10,"kind":25,"sortOrder":26,"count":20},{"id":13,"slug":78,"title":79,"excerpt":80,"content":9,"cover":9,"tone":71,"author":11,"publishedAt":81,"updatedAt":82,"readingMinutes":59,"featured":83,"tags":84,"category":87},"why-enterprise-systems-age","为什么企业系统会在三年后开始“老化”","系统上线时功能齐全，三年后却处处别扭。问题往往不在代码，而在交付时被忽略的那些变化。","2026-10-16T09:30:00+08:00","2026-10-18T15:58:14.648+08:00",true,[85,86],"系统演进","架构设计",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":10,"kind":25,"sortOrder":26,"count":20},{"id":89,"slug":90,"title":91,"excerpt":92,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":93,"updatedAt":93,"readingMinutes":13,"featured":14,"tags":94,"category":98},31,"idempotent-design-basics","幂等设计：重复提交不只是用户手抖","网络重试、消息重投、用户连点，都会让同一个请求到达多次。幂等应该设计在接口里。","2026-10-05T10:13:00+08:00",[95,96,97],"接口设计","幂等","可靠性",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":10,"kind":25,"sortOrder":26,"count":20}]