![](/img/trans.png)
[英]AWS API Gateway POST request is not working for Lambda function
[英]How to pass POST variables to an AWS API Gateway running a lambda function?
我正在使用以下代码尝试运行运行简单的测试lambda函数的aws api网关。
public class AWSTest {
public static void main(String[] args) {
HttpClient client = HttpClientBuilder.create().build();
HttpPost post = new HttpPost("AWS API GATEWAY LINK HERE");
try {
HttpResponse response = client.execute(post);
String json = "{ \"key1\":\"username\", \"key2\":\"password\", \"key3\":\"value3\" }";
List<NameValuePair> argys = new ArrayList<>();
argys.add(new BasicNameValuePair("key1", "key1"));
post.setEntity(new StringEntity(json));
System.out.println(EntityUtils.toString(response.getEntity()));
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我的Lambda函数如下:
exports.handler = (event, context, callback) => {
// TODO implement
callback(null, 'Hello from ' + event.key1);
};
我收到的结果是:
"Hello from undefined"
命中lambda函数的API资源正在使用POST方法。 没有API密钥或任何形式的身份验证,因为这只是测试。
通过API网关获取Lambda函数的信息的最佳方法是什么? 我也打算将来使用此Lambda函数作为登录身份验证,因此也请让我知道我在做什么不是好习惯,并且有更好的方法。 谢谢!
最好的方法是将API端点设置为lambda的代理。 为此,只需两个步骤。
Fisrt,在API Gateway控制台中为资源创建POST方法时,请在配置步骤中选择“ 使用Lambda代理集成” ,在其中选择方法将调用的lambda。 这将包装您的请求,然后以非常方便的格式将其发送到lambda,这将使您的lambda不仅可以访问POST请求的正文,还可以访问url,标头等中包含的所有信息,具体来说,格式为:
{
"resource": "Resource path",
"path": "Path parameter",
"httpMethod": "Incoming request's method name"
"headers": {Incoming request headers}
"queryStringParameters": {query string parameters }
"pathParameters": {path parameters}
"stageVariables": {Applicable stage variables}
"requestContext": {Request context, including authorizer-returned key-value pairs}
"body": "A JSON string of the request payload."
"isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encode"
}
您的示例的json对象将包含在上面的包装json的主体中。
其次,您只需要修改lambda即可读取该对象。 只需通过做身体
event.body
您可以在此处的AWS文档中查看整个示例
关于身份验证的第二个问题,通过API + Lambda来实现它应该没有任何问题。 一切都取决于您如何实现身份验证。 Spring OAtuth可能是一个不错的选择。 您可能有一个lambda来生成访问令牌并通过API访问该lambda,但这只是很多选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.