[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-api-rate-limiting-en":3,"blog-related-api-rate-limiting-en":28,"blog-adjacent-api-rate-limiting-en":62},{"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","Rate Limiting: Protect the System Before Optimising Experience","Rate limits are not there to block users, but to keep most of the system available under abnormal traffic.","\u003Cp>Many systems only think about rate limiting after being knocked over. Three triggers are common: retries from a third-party callback, a client script stuck in a loop, and a genuine traffic spike during a campaign. The first two are faults; the third is business.\u003C\u002Fp>\n\u003Ch2>Where limits belong\u003C\u002Fh2>\n\u003Cp>At the gateway for global limits, which blocks obviously abnormal traffic with simple configuration.\u003C\u002Fp>\n\u003Cp>At the service for business limits, such as a maximum of a few submissions per account per minute, tied to business meaning.\u003C\u002Fp>\n\u003Cp>At the database as a final safety net through pool size and query timeouts, never as the primary control.\u003C\u002Fp>\n\u003Ch2>Choosing thresholds\u003C\u002Fh2>\n\u003Cp>Read normal peaks from monitoring and leave two to three times the headroom. Guessing either blocks real users or does nothing.\u003C\u002Fp>\n\u003Cp>When a limit trips, return a clear status code and retry interval so clients know what to do instead of timing out.\u003C\u002Fp>\n\u003Cp>Log every limit event and watch the trend. Frequent trips mean capacity or design needs attention.\u003C\u002Fp>\n\u003Cp>Rate limiting contains failure locally. One endpoint falling over should never take the whole system with it.\u003C\u002Fp>","","blue","佳益方圆团队","2026-04-08T09:28:00+08:00",1,false,[16,17,18],"APIs","Stability","Operations",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":10,"kind":25,"sortOrder":26,"count":20},0,"engineering","Engineering","Hands-on engineering practices in architecture, performance optimization, AI integration and cross-platform delivery from our R and D team.","cpu","article",60,{},[29,39,51],{"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":38},30,"integration-api-pitfalls","Five Traps in Enterprise System Integration","However complete the API documentation is, integration usually stalls on field semantics, timeouts and repeated pushes.","cyan","2026-10-17T09:00:00+08:00",[37,16,22],"Integration",{"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":40,"title":41,"excerpt":42,"content":9,"cover":9,"tone":34,"author":11,"publishedAt":43,"updatedAt":44,"readingMinutes":45,"featured":46,"tags":47,"category":50},"why-enterprise-systems-age","Why Enterprise Systems Start to Age After Three Years","A system can pass acceptance with every feature checked, then feel awkward three years later. The problem is rarely the code — it is the changes that were never considered at delivery.","2026-10-16T09:30:00+08:00","2026-10-18T15:58:14.648+08:00",2,true,[48,49],"System Evolution","Architecture",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":10,"kind":25,"sortOrder":26,"count":20},{"id":52,"slug":53,"title":54,"excerpt":55,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":56,"updatedAt":56,"readingMinutes":13,"featured":14,"tags":57,"category":61},31,"idempotent-design-basics","Idempotency: Duplicate Submissions Are Not Just Double Clicks","Retries, redelivery and impatient users all send the same request more than once. Idempotency belongs in the API design.","2026-10-05T10:13:00+08:00",[58,59,60],"API Design","Idempotency","Reliability",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":10,"kind":25,"sortOrder":26,"count":20},{"previous":63,"next":81},{"id":64,"slug":65,"title":66,"excerpt":67,"content":9,"cover":9,"tone":68,"author":11,"publishedAt":69,"updatedAt":69,"readingMinutes":13,"featured":14,"tags":70,"category":74},25,"referral-compounding","The Compound Interest of Reputation","A satisfied client brings the next one, provided they can explain clearly what you solved.","teal","2026-04-10T16:15:00+08:00",[71,72,73],"Startup","Reputation","Relationships",{"id":75,"parentId":20,"slug":76,"name":77,"description":78,"icon":79,"cover":9,"tone":10,"kind":25,"sortOrder":80,"count":20},6,"founder-notes","Founder Notes","Reflections from the founding team on business, management and product, documenting the growth of a software company.","pen-tool",10,{"id":82,"slug":83,"title":84,"excerpt":85,"content":9,"cover":9,"tone":86,"author":11,"publishedAt":87,"updatedAt":87,"readingMinutes":13,"featured":14,"tags":88,"category":92},66,"docs-for-future-self","Write Product Docs for Your Future Self","Documentation is not a deliverable but team memory. Docs nobody reads are usually written for the wrong audience.","indigo","2026-04-06T09:28:00+08:00",[89,90,91],"Documentation","Team","Product",{"id":45,"parentId":20,"slug":93,"name":94,"description":95,"icon":96,"cover":9,"tone":10,"kind":25,"sortOrder":97,"count":20},"product-thinking","Product Thinking","Requirement analysis, user experience and product design methods, plus the thinking from business problems to product solutions.","lightbulb",50]