【问题标题】:How to optimize HTTP API?如何优化 HTTP API?
【发布时间】:2011-06-14 01:50:45
【问题描述】:
我们使用 HTTP 构建了一个巨大的 API,从应用程序客户端连接到我们的 php 服务器。 API 只是在 php 中使用 POST 参数完成。然而,我们正在寻找使 API 调用更快的方法,因为客户端在移动设备上。我们可以做些什么来优化它?
1) 我听说 REST API 非常流行并被大公司使用。如何将我的 HTTP POST 转换为 REST API?
2) 如何最大限度地减少 HTTP 标头的数量和开销?
我们还可以采取哪些其他步骤来提高 API 调用的速度?
【问题讨论】:
标签:
php
apache
http
rest
scalability
【解决方案1】:
REST 框架(以及 API)只是简单的 http 调用的包装器。该框架旨在维护 REST 架构原则(Google Roy Fieldings 咆哮什么不是 REST),并封装一些低级行为,如响应编码、编组、取消编组等。
所以我想说的是,REST 框架无助于使您的应用程序比现在更快。它只会让编程更容易一些。
就 HTTP Header 的考虑而言,HTTP Header 应该只包含处理和元信息(如 auth 和 accept)。您在 http 标头中还有什么。 (这是框架可以提供帮助的地方,例如它可以为您处理接受参数)
【解决方案2】:
REST 是一种架构风格,并指导了 HTTP 的设计。它这样做的一种方法是通过缓存约束,它用一点延迟换取了很多效率;也就是说,少数请求为缓存组件支付了一点额外开销,因此绝大多数请求根本不会到达网络。如果经过深思熟虑,这种方法可以极大地提高您的网络应用程序的效率。
不幸的是,在您尝试在项目生命周期的后期进行转换的架构样式变得越来越昂贵,听起来您不仅已经设计了系统,而且已经构建了它。听起来您的设计目标之一就是极低的延迟。我非常怀疑 REST 风格是否符合您的设计目标。
所以我们剩下的就是优化本质上是基于 HTTP 的 RPC。这可以通过以下技术(可能还有我不知道的其他技术)来实现:
- 压缩。您可以“gzip”您的响应并通过
Content-Encoding 响应标头声明它们。参见http://www.webcodingtech.com/php/gzip-compression.php,例如,在 PHP 中这样做。
- “缩小”。通过删除无关紧要的空格和修改变量名称等来缩小 HTML、Javascript 和 CSS 的大小。网络上都有很好的工具。
- 优化图像。按大小或压缩比。
- 标题争用。即使您不使用 REST 样式,HTTP 仍然针对大粒度有效负载进行了优化。对于绝大多数响应,标头的大小与响应主体的大小相比是微不足道的。但是,如果您可以完全手动控制 Web 服务器发出的标头,则一些微小的响应可能适合典型的 1500 字节 MTU。但是,并非所有服务器端 Web 框架都允许这样做,并确保您没有删除正确互操作性所需的标头。
- 向移动客户端推送更少的信息。分解大页面并链接它们。这将更好地与移动客户端上的屏幕空间配合使用。当然,它会对服务器和代理造成严重破坏,并最终随着整体效率的降低而使 Internet 崩溃,但您可以让您的孩子担心这一点。为高级用户提供指向“非移动版本”的链接。