

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 运行和调试本地 Amazon API Gateway 资源
<a name="debug-apigateway"></a>

您可以通过使用 `invokeTarget.target=api` 运行 `type=aws-sam` 的 VS Code 启动配置，运行或调试 `template.yaml` 中指定的 AWS SAM API Gateway 本地资源。

**注意**  
API Gateway 支持两种类型的 API：REST 和 HTTP。但是，带有 AWS Toolkit for Visual Studio Code 的 API Gateway 功能仅支持 REST API。有时候 HTTP API 被称为“API Gateway V2 API”。

**运行和调试本地 API Gateway 资源**

1.  选择以下方法之一以创建 AWS SAM API Gateway 资源的启动配置：
   + **选项 1：**访问 AWS SAM 项目中的处理程序源代码（.js、.cs 或 .py 文件），将鼠标悬停在 Lambda 处理程序上，然后选择**添加调试配置** CodeLens。然后，在菜单中，选择标记为 **API 事件**的项目。
   + **选项 2：**编辑 `launch.json` 并使用以下语法创建新的启动配置。

     ```
     {
       "type": "aws-sam",
       "request": "direct-invoke",
       "name": "myConfig",
       "invokeTarget": {
         "target": "api",
         "templatePath": "n12/template.yaml",
         "logicalId": "HelloWorldFunction"
       },
       "api": {
         "path": "/hello",
         "httpMethod": "post",
         "payload": {
           "json": {}
         }
       }, 
       "sam": {},
       "aws": {}
     }
     ```

1. 在 VS Code **运行**面板中，选择启动配置（在上面的示例中名为 `myConfig`）。

1. （可选）将断点添加到您的 Lambda 项目代码中。

1.  在**运行**面板中，输入 **F5** 或选择**播放**。

1. 在输出窗格中，查看结果。

## 配置
<a name="apigateway-configuration"></a>

在使用 `invokeTarget.target` 属性值 `api` 时，Toolkit 会更改启动配置验证和行为，以支持 `api` 字段。

 

```
{
  "type": "aws-sam",
  "request": "direct-invoke",
  "name": "myConfig",
  "invokeTarget": {
    "target": "api",
    "templatePath": "n12/template.yaml",
    "logicalId": "HelloWorldFunction"
  },
  "api": {
    "path": "/hello",
    "httpMethod": "post",
    "payload": {
      "json": {}
    },
    "querystring": "abc=def&qrs=tuv",
    "headers": {
        "cookie": "name=value; name2=value2; name3=value3"
    }
  },
  "sam": {},
  "aws": {}
}
```

按以下示例的方式替换值：

**invokeTarget.logicalId**  
API 资源。

**path**  
启动 Config 请求的 API 路径，如 `"path": "/hello"`。  
必须是从 `invokeTarget.templatePath` 指定的 `template.yaml` 解析出的有效 API 路径。

**httpMethod**  
以下任一动词：“delete”、“get”、“head”、“options”、“patch”、“post” 和“put”。

**payload**  
要在请求中发送的 JSON 负载（HTTP 正文），其结构和规则与 [lambda.payload](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/serverless-apps-run-debug-config-ref.html) 字段相同。  
`payload.path` 指向包含 JSON 负载的文件。  
`payload.json` 指定内联 JSON 负载。

**标头**  
可选名称-值对映射，用于指定要包含在请求中的 HTTP 标头，如以下示例中所示。  

```
"headers": {
     "accept-encoding": "deflate, gzip;q=1.0, *;q=0.5",
     "accept-language": "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5",
     "cookie": "name=value; name2=value2; name3=value3",
     "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
}
```

**querystring**  
可选字符串，设置请求的 `querystring`，如 `"querystring": "abc=def&ghi=jkl"`。

**AWS**  
AWS 连接信息提供的方式。有关更多信息，请参阅 [调试无服务器应用程序的配置选项](serverless-apps-run-debug-config-ref.md) 部分中的 **AWS 连接（“aws”）属性**表。

**sam**  
AWS SAM CLI 构建应用程序的方式。有关更多信息，请参阅 [调试无服务器应用程序的配置选项](serverless-apps-run-debug-config-ref.md) 部分中的 **AWS SAM CLI（“sam”）属性**表。