如何设置 API Gateway API 以通过 Lambda 代理集成处理二进制数据?

2 分钟阅读
0

我想使用 AWS Lambda 代理集成通过我的 Amazon API Gateway REST API 或 HTTP API 返回二进制数据。

解决方案

**注意:**API 网关 HTTP API 自动处理二进制数据。要使 API 网关 REST API 处理二进制数据,后端 Lambda 函数必须使用 Lambda 函数的输出格式进行代理集成

使用 Lambda 代理集成通过 API 网关 REST API 返回二进制数据

完成以下步骤:

  1. 打开 Lambda 控制台
  2. 创建新的 Lambda 函数
    **注意:**有关 Python 3 Lambda 函数的示例,请参阅从 API Gateway 中的 Lambda 代理集成返回二进制媒体
  3. 打开 API Gateway 控制台
  4. 创建新的 REST API
  5. 要为新的 API 创建 GET 方法,请执行以下操作:
    Methods(方法)面板中,选择 Create method(创建方法)。
    对于 Method type(方法类型),选择 GET
    / - GET - Setup 部分中,对于 Integration type(集成类型),选择 Lambda function(Lambda 函数)。激活 Use Lambda proxy integration(使用 Lambda 代理集成)。
    对于 Lambda function(Lambda 函数),请选择您在其中创建 Lambda 函数的 AWS 区域。然后,输入新 Lambda 函数的名称。
    选择 Create method(创建方法)。
  6. 对于 API,选择 API settings(API 设置)。
  7. Binary media types(二进制媒体类型)下,选择 Manage media types(管理媒体类型),然后选择 Add binary media type(添加二进制媒体类型)。
  8. 添加您的文件格式,例如 image/pngapplication/pdf
  9. 选择 Save changes(保存更改)。
  10. 将您的 API 部署到新阶段
    **注意:**有关如何设置新阶段的信息,请参阅在 API Gateway 中为 REST API 设置阶段

有关如何调用 API 的信息,请参阅在 API Gateway 中调用 REST API

**注意:**对于二进制数据,必须在 Lambda 函数的输出中将 ;isBase64Encoded 属性设置为 truebody 属性还必须包含 base64 编码的二进制媒体。有关详细信息,请参阅 API Gateway 中 REST API 的二进制媒体类型

使用 Postman 或 cURL 调用您的 REST API 来返回二进制数据

**重要事项:**对于 Postman 或 cURL,在 API 请求中包含 Accept 标头。Accept 标头值必须与您使用的文件格式相匹配,例如 image/pngapplication/pdf

运行以下 curl 命令:

curl 'https://exampleRestApiId.execute-api.exampleRegion.amazonaws.com/exampleStageName/' -H 'Accept: image/png'

**注意:**在前面的命令中,将 exampleRestApiId 替换为您的 API 的标识符,将 exampleRegion 替换为您的 API 所在的区域。另外,将 exampleStageName 替换为您的 API 的阶段名称,将 image/png 替换为您的图像文件类型。

使用 Web 浏览器调用 REST API 以返回二进制数据

Web 浏览器会自动发送带有多个值的 Accept 标头。默认情况下,第一个值始终为 html/text。由于 API Gateway 仅接受第一个值,因此您必须将 text/html 作为二进制媒体类型添加到 API 中。否则,您会收到以下错误消息:

“The image "https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/" cannot be displayed because it contains errors.”(图像“https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/”无法显示,因为它包含错误。)

要将 text/html 作为二进制媒体类型添加到 REST API,请完成以下步骤:

  1. 打开 API Gateway 控制台
  2. 选择您的 API。
  3. 在导航窗格中,选择 API settings(API 设置)。
  4. Binary media types(二进制媒体类型)下,选择 Manage media types(管理媒体类型),然后选择 Add binary media type(添加二进制媒体类型)。
  5. 输入 text/html
  6. 选择 Save changes(保存更改)。
  7. 部署 API

有关详细信息,请参阅 API Gateway 中的内容类型转换

AWS 官方
AWS 官方已更新 5 个月前