我正在使用带有API Gateway代理集成(AWS_PROXY)的AWS Lambda,以便直接传递请求,而无需API Gateway强制任何路由.

Lambda托管一个FastAPI应用程序,而Mangum是允许Lambda像uvivorn服务器那样响应请求的中介.

我的问题是,请求应该如何表示为JSON?

@app.get("/get-student/{student_id}")
def get_student(student_id: int):
    return students[student_id]

入站请求应该是什么样子的?这是我天真的猜测.从Mangum文档中,我还不清楚需要什么.

{
   "httpMethod":"GET",
   "path":"/get-student/1"
}

推荐答案

在Lambda代理集成中,API Gateway将整个客户端请求映射到Lambda函数的输入event参数.

这个event参数是Lambda proxy integration request,有效负载的格式取决于您使用的是有效负载的版本1还是版本2;这两个版本的模式都列在docs中.

REST API和amp;WebSocket API仅支持将v1有效负载发送到Lambda代理集成.Http API支持同时发送v1和v2,但通过控制台,它们被配置为by default发送最新版本(目前是v2).

Note to not confuse this with the namespaces that you'd see in the CLI, APIs, CloudFormation, SDKs, or AWS SAM. While the API V1 namespace represents REST APIs & API V2 represents WebSocket and HTTP APIs, the 'namespace versions' do not align with the payload versions.

对于REST API(V1),对您的端点的最小请求可能如下所示:

{
  "version": "1.0", 
  "resource": "/get-student/{student_id}",
  "path": "/get-student/1",
  "httpMethod": "GET",
  "pathParameters": {
    "student_id": "1"
  }
}

对于HTTP API(V2),对您的端点的最小请求可能如下所示:

{
  "version": "2.0",
  "routeKey": "GET /get-student/{student_id}",
  "rawPath": "/get-student/1",
  "pathParameters": {
    "student_id": "1"
  }
}

在大多数AWS SDK中,例如用于.NET的开发工具包,代理集成请求以类的形式提供,即APIGatewayProxyRequest(V1)/APIGatewayHttpApiV2ProxyRequest(V2).

Python相关问答推荐

Django注释:将时差转换为小数或小数

避免循环的最佳方法

自定义新元未更新参数

如何将新的SQL服务器功能映射到SQL Alchemy的ORM

pandas DataFrame中类型转换混乱

使用多个性能指标执行循环特征消除

使用from_pandas将GeDataFrame转换为polars失败,ArrowType错误:未传递numpy. dype对象

如何在Python中使用时区夏令时获取任何给定本地时间的纪元值?

由于NEP 50,向uint 8添加-256的代码是否会在numpy 2中失败?

时间序列分解

如何访问所有文件,例如环境变量

如何列举Pandigital Prime Set

Streamlit应用程序中的Plotly条形图中未正确显示Y轴刻度

利用Selenium和Beautiful Soup实现Web抓取JavaScript表

调用decorator返回原始函数的输出

如何合并两个列表,并获得每个索引值最高的列表名称?

在Python中调用变量(特别是Tkinter)

手动设置seborn/matplotlib散点图连续变量图例中显示的值

ConversationalRetrivalChain引发键错误

如何使用正则表达式修改toml文件中指定字段中的参数值