GCP API 网关不允许后期操作

问题描述 投票:0回答:0

我使用 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 网关和云功能。

我还有疑问:

  1. 为什么 GCP API 网关会这样做,即需要将 POST 重定向到 GET?
  2. GCP 中是否有记录表明开发人员应该预期此类行为?
  3. 所描述的行为给我的服务的所有潜在消费者带来了明显的不便,因为要求他们在 HTTP 调用中包含提到的选项,并且实现这一点的方法将根据他们使用的特定 HTTP 客户端软件而有所不同。有什么办法可以完全避免这种奇怪的行为吗?
google-cloud-platform google-cloud-functions http-post http-status-code-302 google-api-gateway
© www.soinside.com 2019 - 2024. All rights reserved.