繁体   English   中英

如何将POST变量传递给运行Lambda函数的AWS API Gateway?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM