我使用 OpenAPI 2.0 规范部署了一个由两种方法组成的 API。
每个方法都有自己的路径,采用几个参数并调用自己的云函数。第一个使用 GET,另一个使用 POST。
我还将 API 密钥作为查询参数传递
GET 调用就像一个魅力,POST 返回以下错误:
{
"code": 405,
"message": "The current request is matched to the defined url template "..." but its http method is not allowed"
}
CloudFunction 日志确认从未调用相应的函数。看来 API 网关由于某种原因阻止了 POST HTTP 方法。
我发现一篇博客文章似乎解决了这个问题,但与 CloudRun 相关
https://www.googlecloudcommunity.com/gc/Serverless/Apigateway/m-p/614994#M1927
我尝试遵循建议#1:#确保您已正确配置 API 网关以允许您尝试访问的特定端点的 POST 请求。您可以通过在 API Gateway 控制台中编辑该端点的“方法请求”设置来完成此操作。#
不幸的是,GCP控制台上的API网关页面似乎不包含帖子所暗示的“方法请求”控件。
更新 事实证明,导致错误 405 的直接问题是 GCP 返回到我的 HTTP 客户端的重定向 302。根据 this document - HTTP 客户端的默认行为是发送 GET 来响应此类重定向。这将导致错误 405,因为未为给定路径指定 GET。通过包含选项--post302,可以强制curl HTTP 客户端忽略此重定向。通过此更改,我的服务已成功触发 - POST 调用按预期到达 API 网关和云功能。
我还有疑问: