AWS Lambda 函数 - 访问路径和请求参数值
AWS Lambda function - accessing Path and request parameter value
对于我的 POC,创建了简单的 lambda 函数,它将通过 rest api 提供 emp 信息。
创建 lambda 函数并使用 API 网关访问所有 emp 数据。
在访问特定数据时面临一些挑战。
我正在寻找
emp/1 - 检索 emp id
emp/_search?name="apple" - 搜索名称包含 apple.
问题是如何在 java 代码中检索路径和请求参数。
public class TestAwsLambdaFunction implements RequestHandler<Map<String, Object>, String> {
@Override
public String handleRequest(Map<String, Object> input, Context context) {
String empID= null;
try {
@SuppressWarnings("unchecked")
Map<String, String> pathParameters = (Map<String, String>) input.get("querystring");
empID= pathParameters.get("id");
System.out.println(empID);
// TO-Do Business logic -
} catch (Exception e) {
// TODO: handle exception
}
return "Hello from Lambda!" + empID;
}
}
在 Rest api 调用中公开我的数据的最佳方法是什么。与 Lambda 或 serverless 有点混淆。
可以选择通过页面方式显示数据。因为我是 AWS 的新手。请指导我
您需要在设置 API 网关时选择 Lambda Proxy Integrations
。这里是官方文档Set up Lambda Proxy Integrations in API Gateway。
在这种情况下,API网关会将整个请求数据传递给Lambda,包括请求headers、查询字符串参数、URL路径变量等。然后您可以使用 Java 代码解析数据。
问题是如何在java代码中获取路径和请求参数。
您可以使用映射模板将请求 body 中的 $input.params('name') 属性 发送到您的 Lambda 函数。
在 Rest api 调用中公开我的数据的最佳方法是什么
根据这些准则使用代理集成:
- 避免贪婪的路径变量,除了 catch-all 404.
- 避免使用 ANY 方法。
- 定义请求模型并启用请求验证(记住它默认关闭)。
- 在您的 Lambda 中,检查 content-type header 是否与您的请求模型之一匹配,如果不匹配 return 415 Unsupported Media Type 状态代码(代理集成使用 WHEN_NO_MATCH 直通行为)。完成此检查后,您的 Lambda 可以假定请求验证已完全执行。
作者:本·科欧
https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-call-api.html
https://www.puresec.io/blog/aws-security-best-practices-for-api-gateway
https://www.stackery.io/blog/serverless-function-architecture-principles/
https://technology.finra.org/code/enjoying-auto-scaling-integrated-authentication-low-host-cost.html
对于我的 POC,创建了简单的 lambda 函数,它将通过 rest api 提供 emp 信息。 创建 lambda 函数并使用 API 网关访问所有 emp 数据。 在访问特定数据时面临一些挑战。
我正在寻找
emp/1 - 检索 emp id emp/_search?name="apple" - 搜索名称包含 apple.
问题是如何在 java 代码中检索路径和请求参数。
public class TestAwsLambdaFunction implements RequestHandler<Map<String, Object>, String> {
@Override
public String handleRequest(Map<String, Object> input, Context context) {
String empID= null;
try {
@SuppressWarnings("unchecked")
Map<String, String> pathParameters = (Map<String, String>) input.get("querystring");
empID= pathParameters.get("id");
System.out.println(empID);
// TO-Do Business logic -
} catch (Exception e) {
// TODO: handle exception
}
return "Hello from Lambda!" + empID;
}
}
在 Rest api 调用中公开我的数据的最佳方法是什么。与 Lambda 或 serverless 有点混淆。 可以选择通过页面方式显示数据。因为我是 AWS 的新手。请指导我
您需要在设置 API 网关时选择 Lambda Proxy Integrations
。这里是官方文档Set up Lambda Proxy Integrations in API Gateway。
在这种情况下,API网关会将整个请求数据传递给Lambda,包括请求headers、查询字符串参数、URL路径变量等。然后您可以使用 Java 代码解析数据。
问题是如何在java代码中获取路径和请求参数。
您可以使用映射模板将请求 body 中的 $input.params('name') 属性 发送到您的 Lambda 函数。
在 Rest api 调用中公开我的数据的最佳方法是什么
根据这些准则使用代理集成:
- 避免贪婪的路径变量,除了 catch-all 404.
- 避免使用 ANY 方法。
- 定义请求模型并启用请求验证(记住它默认关闭)。
- 在您的 Lambda 中,检查 content-type header 是否与您的请求模型之一匹配,如果不匹配 return 415 Unsupported Media Type 状态代码(代理集成使用 WHEN_NO_MATCH 直通行为)。完成此检查后,您的 Lambda 可以假定请求验证已完全执行。
作者:本·科欧
https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-call-api.html
https://www.puresec.io/blog/aws-security-best-practices-for-api-gateway
https://www.stackery.io/blog/serverless-function-architecture-principles/
https://technology.finra.org/code/enjoying-auto-scaling-integrated-authentication-low-host-cost.html