在 API Gateway 中设置方法响应
API 方法响应将客户端将收到 API 方法请求的输出进行封装。输出数据包括 HTTP 状态代码、部分标头,还可能包含正文。
使用非代理集成,可从相关的集成响应数据映射指定的响应参数和正文,也可以根据映射分配特定静态值。集成响应中已指定这些映射。映射可以是按原样传递集成响应的恒等变换。
使用代理集成,API Gateway 可自动将后端响应传递到方法响应。您无需设置 API 方法响应。但如果使用 Lambda 代理集成,Lambda 函数必须为 API Gateway 返回此输出格式的结果,才能将集成响应成功映射到方法响应。
通过编程,该方法响应设置相当于创建 API Gateway 的 MethodResponse 资源和设置 statusCode、responseParameters 和 responseModels 的属性。
为 API 方法设置状态代码时,您应该选择一个状态代码作为处理任何意料之外的集成响应的默认代码。将 500
设置默认状态代码比较合理,因为这相对于将未映射的响应转换为服务器端错误。出于说明原因,API Gateway 控制台将 200
响应设置为默认响应。但您可以将其重置为 500
响应。
要设置方法响应,您必须已创建方法请求。
设置方法响应状态代码
方法响应的状态代码定义了响应类型。例如,响应 200、400 和 500 分别表示响应成功、客户端错误和服务器端错误。
要设置方法响应状态代码,请将 statusCode
属性设置为 HTTP 状态代码。以下 AWS CLI 命令将创建 200
的方法响应。
aws apigateway put-method-response \ --region us-west-2 \ --rest-api-id vaz7da96z6 \ --resource-id 6sxz2j \ --http-method GET \ --status-code 200
设置方法响应参数
方法响应参数定义客户端在哪些标头中收到相关方法请求的响应。响应参数还会根据 API 方法的集成响应中规定的映射指定 API Gateway 将集成响应参数映射到的目标。
要设置方法请求参数,请添加到 responseParameters
格式的 MethodResponse
键/值对的 "{parameter-name}":"{boolean}"
映射。以下 CLI 命令显示了设置 my-header
标头的示例:
aws apigateway put-method-response \ --region us-west-2 \ --rest-api-id vaz7da96z6 \ --resource-id 6sxz2j \ --http-method GET \ --status-code 200 \ --response-parameters method.response.header.my-header=false
设置方法响应模型
方法响应模型定义了方法响应正文的格式。为 API 生成强类型开发工具包时,必须设置方法响应模型。它可确保输出将在 Java 或 Objective-C 中转换为适当的类。在其他情况下,设置模型是可选操作。
设置响应模型之前,必须先在 API Gateway 中创建模型。为此,可以调用 create-model
命令。以下示例显示了如何创建能够描述 PetStorePet
方法请求的响应正文的 GET /pets/{petId}
模型。
aws apigateway create-model \ --region us-west-2 \ --rest-api-id vaz7da96z6 \ --content-type application/json \ --name PetStorePet \ --schema '{ \ "$schema": "http://json-schema.org/draft-04/schema#", \ "title": "PetStorePet", \ "type": "object", \ "properties": { \ "id": { "type": "number" }, \ "type": { "type": "string" }, \ "price": { "type": "number" } \ } \ }'
结果将创建为 API Gateway Model
资源。
要设置方法响应模型以定义有效负载格式,请将 "application/json":"PetStorePet" 密钥值对添加至 MethodResponse
资源的 requestModels
地图。put-method-response
的以下 AWS CLI 命令显示了如何执行此操作:
aws apigateway put-method-response \ --region us-west-2 \ --rest-api-id vaz7da96z6 \ --resource-id 6sxz2j \ --http-method GET \ --status-code 200 \ --response-parameters method.response.header.my-header=false \ --response-models '{"application/json":"PetStorePet"}'