You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS SAM中如何为API路径配置多个路径参数

问题原因

你配置校验失败的核心原因是API Gateway(SAM的Api事件底层依赖的AWS服务)不支持在同一路径段内连续定义两个无分隔符的路径参数,你预期写的/updateUserProfile/{companyName}{cognitoUserID}里两个参数挤在同一个路径段、没有明确边界,路径解析器无法区分两个参数的取值范围,自然无法通过语法校验。

可行实现方案

方案1:按REST规范用斜杠分隔多路径参数(推荐)

这是最稳妥、完全符合SAM和API Gateway规则的写法,直接把两个参数拆成独立的路径段,用斜杠分隔即可,配置示例:

Type: AWS::Serverless::Function 
    Properties:
      CodeUri: cloudPortalFunctions/
      Handler: app.updateUserProfile
      Layers:
        - !Ref updateUserProfileDepLayer
      Runtime: nodejs14.x
      Architectures:
        - x86_64
      Events:
        updateUserProfile:
          Type: Api 
          Properties:
            Path: /updateUserProfile/{companyName}/{cognitoUserID}
            Method: PUT

配置完成后,你在Lambda代码里可以直接从事件对象的路径参数中拿到两个值,Node.js 示例取值逻辑:

// Lambda代理集成模式下的取值方式
const { companyName, cognitoUserID } = event.pathParameters;
// 拿到两个值后直接作为DynamoDB的分区键、排序键传入更新逻辑即可

最终请求路径格式为:/updateUserProfile/你的公司名/你的Cognito用户ID,完全满足你同时传两个键值的需求。

方案2:单路径参数+代码拆分(适用于必须把两个值放在同一路径段的场景)

如果你业务上强制要求两个参数出现在同一个路径段,不要定义两个路径参数,只需要定义单个路径参数承载拼接后的值,在Lambda代码里按约定分隔符拆分即可:

  1. YAML路径配置:
    Path: /updateUserProfile/{userCompositeKey}
    Method: PUT
    
  2. 约定拼接规则:比如用不会出现在CompanyName、CognitoUserID取值里的特殊字符(比如_$_)作为分隔符,前端请求时把两个值拼成公司名_$_用户ID传入
  3. Lambda代码里拆分取值:
    const compositeKey = event.pathParameters.userCompositeKey;
    const [companyName, cognitoUserID] = compositeKey.split('_$_');
    

注意:这个方案有取值解析失败的风险,必须确保你选的分隔符不会出现在两个参数的合法取值中,非必要不推荐使用。

内容的提问来源于stack exchange,提问作者Jino Rigney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:21:21