首页 > 解决方案 > 从 REST API 返回 413 响应时的最佳实践

问题描述

我的 REST API 有时需要返回413 'Payload too large'响应。

作为上下文:我将 AWS 与 API Gateway 和 Lambda 一起使用。Lambda 的最大有效负载为 6Mb。有时 - 不到 0.1% 的请求 - 负载大于 6Mb,我的 API 返回 413 状态。

我处理这个问题的方法是提供一种从 API 请求数据的替代方法 - 作为一个 URL,该 URL 链接到存储为 S3 上的 json 文件的数据。S3 位于具有生命周期规则的存储桶中,该规则会在短时间内自动删除文件。

这工作正常,但具有不令人满意的特性,即大负载请求会导致客户端进行 3 个单独的调用:

  1. 向 API 发出标准请求并接收 413 响应
  2. 向 API 发出第二次请求以获取存储在 S3 URL 中的数据。asURL=true为此,我在 GET 请求中使用了一个参数。
  3. 发出第三个请求以从 S3 存储桶中检索数据

我正在考虑的另一种方法是在 413 响应中嵌入 S3 URL。例如,将其嵌入到自定义标头中。这将避免第二次调用的需要。

我还可以更改方法,使每个请求都作为 S3 URL 返回,但随后 99.9% 的请求将不必要地进行 2 次调用,而不仅仅是 1 次。

这里是否有最佳实践,或者同样需要避免的不良实践?

标签: amazon-web-servicesaws-lambdahttp-status-code-413

解决方案


我会按照你说的方式做 - 在 413 响应中嵌入 S3 URL。然后从 413 恢复的责任将由客户端检查响应中的 413 并调用 s3。如果消费者是内部的,那就没问题了。如果消费者是外部的,这可能会带来不便。


推荐阅读