API设计中性能提升的10个建议

简介: API设计中性能提升的10个建议

【引子】节前的时候, 一好友约我聊一聊API 的设计。当时觉得仿佛有万语千言,但我又难以脱口而出1、2、3。原来,即便是工作的日常,也缺乏一个系统性的思考和整理。API的设计涉及到的方面很多, 分类是一个基本的思考方式。如果可以形成一个系列性的文字,那就从性能开始吧。


就像任何性能一样,API 性能主要取决于如何响应不同类型的请求。例如:典型的电商场景,显示用户当前的订单。应用程序从一个 API 获取订单详情。但是,如果希望用户在一个地方能查看他们所有的订单,这意味着,我们的 API 现在将返回比以前更多的数据,后台的负载会更大。如何确保我API 能够将所有数据返回给用户,而不会出现延迟、服务器错误和过多请求等问题呢?

一般地, 如何在API设计中提升性能呢?还没有梳理出完整的方法论,但就REST API 而言,根据多年的经验和教训,这里总结了10点建议。

1 启用日志,建立监控

API 的监控是最重要的,没有之一。

拥有日志、监控和告警可以帮助我们在潜在问题变成真正问题之前诊断并纠正问题。如果没有启用日志记录,并且存在潜在问题,那么我们将无法跟踪性能指标,或者在特定请求中定位问题发生的位置。奢侈一点的话, 要尝试全链路跟踪系统,尽管成本较高,但物有所值。

2 提升网速,带宽足够

即便API设计的性能非常强大,也扛不住缓慢的网络延迟。不可靠的网络可能会导致宕机,导致违反SLA、服务条款以及曾经向客户做出的承诺。必须要投资适当的网络基础设施,以便我们能够维持所需的性能水平,有时候,可以通过利用和购买足够的云资源来实现。

3 减少有效负载

如果响应数据的有效负载非常大,将会减慢请求完成的时间,并影响性能。简单地,使用 GZip 压缩来减少有效载载的大小,可以在 Web API 上使用 Deflate 压缩,或者,可以将 Accept-EncodingRequest 更新为 gzip。有效的数据压缩减少了在 web 应用程序上响应的下载量,同时提高了上传速度。

4 使用缓存

缓存是提高 API 性能的最简单的方法之一。如果有经常返回相同响应的请求,那么该响应的缓存有助于避免额外的服务调用和数据库查询。需要注意的是,确保在缓存使用的生命周期,尤其是在发生数据更新的时候。缓存增强了可伸缩性。服务端可以通过设置响应头来提高缓存能力,比如 Cache-Control、 Expires、 Pragma、 Last-Modified 等等。

5 流控与频控

API 遭受 DDoS 攻击是恶意的,但有时候,也可能是工程师无意造成的,例如当工程师在某个本地应用程序的循环中执行调用 API 的调用。一般地,可以通过监视每个 IP 地址或每个 SSO令牌发生的事务数量来避免这种情况。频控和流控都是为了性能而实现限速的方式,有助于处理API的意外调用,并主动监视和识别可能的恶意活动,也是实现安全性的重要手段。

6 尝试HTTP 的标准方法

尝试使用HTTP 的标准方法,对API 的性能会有一定的帮助。

http 方法  幂等性  是否安全
get 是 
head  是 
put 
delete 
post 
patch  否 


例如,PUT 和 PATCH 操作在更新资源方面是相似的,但执行更新的方式是不同的。PUT 操作通过向整个资源发送更新来更新资源。PATCH 操作只对需要更新的资源应用部分更新。由此产生的 PATCH 调用可以产生更小的有效负载,从而提高性能。需要注意的是PATCH 调用可不是幂等的。

7 尝试标准的HTTP 状态码

我们可以进一步对响应进行标准化、细分和限制,这有助于降低结果的复杂性,并通过仅针对客户所要求的内容提供响应/结果来改善整个客户体验。尝试使用标准的HTTP 状态码是一种不错的方式,显然,响应的状态由其状态代码指定: 1xx 表示信息,2xx 表示成功,3xx 表示重定向,4xx 表示客户机错误,5xx 表示服务器错误。例如,使用 HTTP状态码,并且只使用响应体提供错误细节。

HTTP/1.2 400 Bad Request
Content-Type: application/json
{
    "error": "Expected xxx in xxx"
}

8 动静分离,使用CDN

此外,如果有大量的后台进程进程,可以在单独的线程上运行这些进程,以避免阻塞请求。常见的一种方式是将API请求中的静态资源分离开了,可以使用内容交付网络(CDN)来更快地服务不同地区请求中的静态资源。

9 启用分页,过滤排序

对于大型数据集,限制返回的数据量是至关重要的。此外,可能希望指定要包含在响应中的资源的字段或属性,从而限制返回的数据量,最终希望查询特定的值并对返回的数据进行排序。

分页有助于从多个响应创建大量的内容。这种优化有助于改进响应,同时保存传输/显示给客户的数据。当链接在响应中返回时,api 变得更具自我描述性。对于在支持分页的响应中返回的集合,“ first”、“ last”、“ next”和“ prev”链接至少是有益的。

10 使用性能更优的应用框架

应用框架的使用是为了提高开发效率,如果为了性能进行适当的优化和增强,也可以为业务和客户提供极其强大的体验。一些框架专门用于构建 REST API,可以帮助我们在不牺牲生产力的前提下提升性能。例如,在python中,web 应用框架众多,例如 Django ,Flask,Tornado,Falcon等等。就性能而言,Falcon和Tornado可能是不错的选择。在 Node 中,Restify 似乎也不错的选择,但是我还没有在生产环境来尝试它,基于Go 语言的应用框架更是非常值得关注的。

总之,业务需求和客户期望总是随着时间而变化的,我们有责任决定如何以高效的方式构建高性能的API,这样可以帮助我们实现并超越目标。根据特定的 API 和用例,确定API与什么服务交互,以及调用的频率,从哪里调用等等,我们可以用不同的方式实现高性能的API。


相关文章
|
22天前
|
Linux 程序员 数据格式
【2026最新】Notepad++下载、安装和使用一篇搞定(附中文版安装包)
Notepad++ 是一款免费开源、轻量高效的 Windows 文本编辑器,支持 C/Python/HTML 等 80+ 语言语法高亮、代码折叠、正则替换、编码转换及插件扩展,专为程序员与文本处理用户打造,完美替代系统记事本。(239字)
|
8天前
|
人工智能 缓存 安全
Claude Code 封号真实原因曝光,这次彻底不装了,直接针对国内开发者的账号下手?
Claude Code 封号潮背后:逆向扒出客户端隐写区域标记,Anthropic 政策收紧叠加 DeepSeek 7 月涨价,国产替代更紧迫。
|
13天前
|
人工智能 JSON 自然语言处理
让教学更智慧:用阿里云百炼工作流,自动生成中小学教材内容#小有可为#有温度的AI
通过可视化工作流编排,将大模型推理能力转化为标准化的教学内容生成引擎。教师只需输入教材标题和适用学段,即可自动获得结构完整、符合课程标准的章节内容,大幅降低备课门槛,助力教育资源均衡化。
496 127
|
17天前
|
存储 人工智能 监控
QoderWork完全指南:从入门到精通,把“AI实习生”变成你的全能工作搭档
阿里云2026年推出的桌面端AI工作助手QoderWork,不止聊天,更可动手干活:本地运行、安全可控,支持文件整理、数据分析、PPT生成、网页开发等;内置专家套件、多Agent协作与自定义Skills,让AI真正成为你身边的“AI实习生”。
|
8天前
|
人工智能 安全 程序员
终于,Claude Code 封号的原因被曝光了!竟然针对中国用户,植入隐形代码?!
通俗易懂地揭秘 Claude Code 封号的手段,分享一些自己对 AI 编程困境的思考,Codex、Cursor、DeepSeek、智谱 GLM、甚至是豆包,都有所行动了
464 1
|
9天前
|
人工智能 安全 Cloud Native
Higress 新发布:AI Gateway 能力增强,Gateway API 及其推理扩展持续打磨
增强 AI 网关能力,持续打磨 Gateway API 及其推理扩展。
393 125
|
6天前
|
人工智能 编解码 物联网
2026 最新Stable Diffusion 本地部署教程 下载安装使用详细图解(含官网安装包)
Stable Diffusion(SD)是2022年发布的开源文生图模型,由Stability AI等联合开发。支持文生图、图生图、局部重绘等,依托VAE降低算力需求,可在消费级显卡运行。本文提供秋葉aaaki制作的Windows整合包(含图形界面与插件),开箱即用,零配置启动。