amazon-web-services - 从 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 个单独的调用:
- 向 API 发出标准请求并接收 413 响应
- 向 API 发出第二次请求以获取存储在 S3 URL 中的数据。
asURL=true
为此,我在 GET 请求中使用了一个参数。 - 发出第三个请求以从 S3 存储桶中检索数据
我正在考虑的另一种方法是在 413 响应中嵌入 S3 URL。例如,将其嵌入到自定义标头中。这将避免第二次调用的需要。
我还可以更改方法,使每个请求都作为 S3 URL 返回,但随后 99.9% 的请求将不必要地进行 2 次调用,而不仅仅是 1 次。
这里是否有最佳实践,或者同样需要避免的不良实践?
解决方案
我会按照你说的方式做 - 在 413 响应中嵌入 S3 URL。然后从 413 恢复的责任将由客户端检查响应中的 413 并调用 s3。如果消费者是内部的,那就没问题了。如果消费者是外部的,这可能会带来不便。
推荐阅读
- c# - 使用 SWIG 从 C++ 回调到 C#
- sql - 什么是“NoSQL”数据库模型?
- go - 如何创建带有`New`前缀混淆的结构
- r - 在 ggplot 中使用两个程序定义变量的线性运算作为美学
- java - 如何在 Hibernate/JPA 中的两个表之间创建中间表?
- android - 毕加索图像错误
- imagemagick - 了解 CMYK 到 RGB 转换代码
- javascript - 尝试在 Heroku 上托管 VueJS 应用程序。在 heroku 日志中获取“npm ERR!缺少脚本:开始”,在我的页面上获取“应用程序错误”
- database - 如何从 laravel 4.2 访问远程数据库
- angularjs - 我们如何在 Angular JS 中在运行时获取脚本响应方法