2

当我为 iOS 导出 API 时,如何为 POST 端点添加请求模型,以便它出现在 API 网关中?我可以在 AWS 中手动添加请求模型,但由于这是通过服务器部署的,所以我不需要它。我看到有一个 responseModels 用于定义端点,但我看不到 requestModels?

我的 s-functions.json 有这个

"endpoints": [
    {
      "path": "blog/graphql",
      "method": "POST",
      "type": "AWS",
      "authorizationType": "AWS_IAM",
      "authorizerFunction": false,
      "apiKeyRequired": false,
      "requestParameters": {},
      "requestTemplates": {
        "application/json": "{\"query\" : $input.json(\"$\")}"
      },
      "responses": {
        "400": {
          "statusCode": "400"
        },
        "default": {
          "statusCode": "200",
          "responseParameters": {},
          "responseModels": {},
          "responseTemplates": {},
          "application/json": ""
        }
      }
    }
  ]

然后,在 AWS APIGateway 中,我需要手动将请求模型添加为

{
    "title": "Example Schema",
    "type": "object",
    "properties": {
        "query": {
            "type": "string"
        }
    },
    "required": ["query"]
}

然后,当我为 iOS 导出 API 时,我确实获得了正确的方法来发送 graphQL 查询并且它可以工作。

但是,由于我想使用无服务器部署来部署它,我不能继续手动添加它。

而且我需要 API 端点调用通过 iOS 的 APIGateway SDK 才能使用 cognito 凭据,而不是手动执行 https。

4

1 回答 1

1

看起来无服务器项目的lib/Endpoint.js不包含 requestModels 的条目,但该项目正在积极维护,因此也许您可以在 GitHub 上提出问题,让他们添加支持。我认为在此期间分享一个 AWS CLI 方法可能会很有用。

您创建请求模型的方式与创建响应模型的方式相同,但是在创建它们之后,没有一个简单的命令相当于将aws apigateway put-method-response请求模型与方法相关联。这似乎是 AWS CLI 缺少的功能。

但是,我使用aws apigateway update-method. 您需要先为请求创建模型,然后此命令将其添加到方法中。

aws apigateway update-method \
  --region $region \
  --rest-api-id "$rest_api_id" \
  --resource-id "$resource_id" \
  --http-method $method \
  --patch-operations "op=add,path=/requestModels/application~1json,value=${request_model_name}"

请注意,奇怪的application~1json构造是阻止斜杠application/json被解释为路径的一部分。

顺便说一句,我尝试并未能使 JSON 文件参数--patch-operations正常工作。如果有人能解释为什么这个文件会导致下面的错误,我很想听听。

$ cat patch.json
{
    "patchOperations":[{
        "op" : "add",
        "path" : "/requestModels/application~1json",
        "value" : "TestRequest"
    }]
}
$ aws apigateway update-method \
  --rest-api-id abc123 \
  --resource-id def456 \
  --http-method POST \
  --patch-operations "file://patch.json"
Error parsing parameter '--patch-operations': Invalid JSON: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
JSON received: {
于 2016-06-26T16:11:37.140 回答