当前位置: 首页 > 知识库问答 >
问题:

Amazon Web Services-API网关

支才
2023-03-14

我正在尝试集成AWS Api网关和AWS Lambda,
我能够调用Lambda函数并获得响应。
但是当我使用AWS API网关并使用GET方法调用Lambda函数时,
我无法使用查询字符串传递参数。

这是我的处理程序-

package example;

import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.Context;

public class Hello implements RequestHandler<Request, Response>{
    public Response myHandler(Request request, Context context) {

        LambdaLogger logger = context.getLogger();
        logger.log("received a Lambda request");
        logger.log("Name param contains: "+request.getName()+" Age param contains: "+request.getAge());
        String greetingString = String.format("Hello "+request.getName()+", you are "+request.getAge()+" years old");
       return new Response(greetingString);
    }

    public Response handleRequest(Request arg0, Context arg1) {
        // TODO Auto-generated method stub
        return null;
    }
}

下面是Request类-

package example;

public class Request {
    String name;
    String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

}

这是反应课-

package example;

public class Response {
    String greetings;

    public String getGreetings() {
        return greetings;
    }

    public void setGreetings(String greetings) {
        this.greetings = greetings;
    }

    public Response(String greetings) {
        this.greetings = greetings;
    }

    public Response() {
    }

}
{
  "name": "Aniruddha",
  "age": "25"
}
{
  "greetings": "Hello Aniruddha, you are 25 years old"
}
?name=aniruddha&age=25
{
  "greetings": "Hello null, you are null years old"
}
{"Content-Type":"application/json"}
Execution log for request test-request
Mon Nov 21 16:28:10 UTC 2016 : Starting execution for request: test-invoke-request
Mon Nov 21 16:28:10 UTC 2016 : HTTP Method: GET, Resource Path: /aniruddhaagw
Mon Nov 21 16:28:10 UTC 2016 : Method request path: {}
Mon Nov 21 16:28:10 UTC 2016 : Method request query string: {name=aniruddha, age=25}
Mon Nov 21 16:28:10 UTC 2016 : Method request headers: {}
Mon Nov 21 16:28:10 UTC 2016 : Method request body before transformations: null
Mon Nov 21 16:28:10 UTC 2016 : Endpoint request URI: https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-east-1:520784750730:function:aniruddhaLambda/invocations
Mon Nov 21 16:28:10 UTC 2016 : Endpoint request headers: {x-amzn-lambda-integration-tag=test-request, Authorization=**************************************************************************************************************************************************************************************************************************************************************************************dfb8a3, X-Amz-Date=20161121T162810Z, x-amzn-apigateway-api-id=h0b98tua9i, X-Amz-Source-Arn=arn:aws:execute-api:us-east-1:520784750730:h0b98tua9i/null/GET/aniruddhaagw, Accept=application/json, User-Agent=AmazonAPIGateway_h0b98tua9i, Host=lambda.us-east-1.amazonaws.com}
Mon Nov 21 16:28:10 UTC 2016 : Endpoint request body after transformations: null
Mon Nov 21 16:28:10 UTC 2016 : Endpoint response body before transformations: {"greetings":"Hello null, you are null years old"}
Mon Nov 21 16:28:10 UTC 2016 : Endpoint response headers: {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=7e29d831-b007-11e6-83cc-8b56e673337e, Connection=keep-alive, Content-Length=50, Date=Mon, 21 Nov 2016 16:28:10 GMT, Content-Type=application/json}
Mon Nov 21 16:28:10 UTC 2016 : Method response body after transformations: {"greetings":"Hello null, you are null years old"}
Mon Nov 21 16:28:10 UTC 2016 : Method response headers: {Content-Type=application/json}
Mon Nov 21 16:28:10 UTC 2016 : Successfully completed execution
Mon Nov 21 16:28:10 UTC 2016 : Method completed with status: 200

共有1个答案

东云
2023-03-14

检查API网关请求和响应映射是否正确Ref:http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#input-variable-reference

此外,不要忘记部署api更改以使其得到反映

#set($allParams = $input.params())
{
  "params" : {
    #foreach($type in $allParams.keySet())
    #set($params = $allParams.get($type))
    "$type" : {
      #foreach($paramName in $params.keySet())
      "$paramName" : "$util.escapeJavaScript($params.get($paramName))"
      #if($foreach.hasNext),#end
      #end
    }
    #if($foreach.hasNext),#end
    #end
  }
}
 类似资料:
  • 让我抓狂的一件事是AWS有大量关于ARN格式的文档,但没有任何类型的生成器让您确信ARN是正确的。 在IAM中,我试图设置一个策略来允许访问API网关,我已经阅读了以下文档: http://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html#api-使用iam策略的网关控制访问 http://docs.aws.

  • Gravitee API 网关是基于 Vert.X 开发的高性能接口网关,支持 Swagger 导入接口、文档管理、性能分析、操作审计、日志,负载均衡等功能。 主要功能特性 REST API:通过 Web UI 执行的每个操作都使用内部的 Rest API 一键部署:只需单击一下,API 就会部署到每个 Gravitee.io 网关,并且可以随时使用 高可扩展:可以轻松地将新的 Gravitee.

  • 我们使用keycloak来处理API网关中的身份验证(客户端/秘密)。 Kong api服务使用konnect托管插件引用KeyClope来验证客户端凭据并返回承载令牌。 未来对其他endpoint的调用将使用oauth2内省来通过KeyClope内省验证承载令牌 但是,当我通过Kong api gateway进行身份验证时,它会返回一个承载令牌,但该令牌无法自省。 如果我直接授权给KeyClop

  • 我试图使用CloudFormation在API网关中部署一个API。这些方法要求启用CORS,我按照这里的模板在Cloudformation模板中启用CORS for API Gateway来做到这一点。这是我的模板 部署API后,方法返回一个200,响应标头如下 访问-控制-允许-起源→* 通过→1.1 sdlkfnsdlk.CloudFront.net(CloudFront) X-AMZ-CF

  • !Important: StrongLoop网关废弃于2016年4月22日. StrongLoop Gateway 现在属于 IBM API Connect的一部分, 这是一个为内部部署和云环境解决了API生命周期的所有方面的完整解决方案.它提供了全面的功能来 创建,运行,管理,保护和monetize APIs (??)和微服务.提供了较好的集成用户体验,它能够快速部署和API简化的管理。 该St

  • # Overview YunPian API for golang # Usage     func test() {    tpl := "【测试】#platform# 后台 #service# 出现问题,问题可能是:#info#,请尽快解决。"         pattern := "#platform#=XX,#service#=派发服务,#info#=无法连接到[127.0.0.1:200

  • 我有一个奇怪的情况。我有一个调用API网关endpointREST API(GET方法)的React应用程序。每当我运行应用程序(从localhost)时,我都会收到一个“未经授权”(401)的错误响应。 但是,当我在POSTMAN上调用相同的API时,我得到了200状态的正确响应。然后奇怪的是,当我运行该应用程序时,我也能够在浏览器上以200状态获得相同的正确响应! 我在过去两周内无法解决问题,

  • 我对API网关有一些问题。我做了几个API方法,有时它们的工作时间超过10秒,Amazon返回504错误。下面是截图: 请救命!如何增加超时?