非常に安全なクラウド機能が必要なので、それを API ゲートウェイの背後に配置しようとしています。ヘッダーに Bearer トークンを渡して直接呼び出すと、関数は正常に動作します。
https://us-central1-<my-project>.cloudfunctions.net/<my-hello-function>
ただし、API Gateway を介して API トークンで使用できるようにしたいと考えています (そして、「こんにちは」と言うよりも便利なことを行います)。
https://my-gateway-xxxxxxxx.uc.gateway.dev/v1/stats&key=<my-API-token>
呼び出そうとすると次のメッセージが表示されます:
{ "code": 404, "message": "パスが要件 URI テンプレートと一致しません。" }
私の API Gateway 構成ファイル:
swagger: "2.0"
info:
title: my-gateway
version: "1.0.0"
basePath: "/v1"
schemes:
- "https"
produces:
- application/json
paths:
/stats:
get:
tags:
- "stats"
summary: "get service stats"
description: "Returns statistics"
operationId: "hello_world"
#produces:
#- "application/json"
parameters:
- name: "since"
in: "header"
description: "Date to retrieve information"
required: false
type: "string"
format: "date"
x-google-backend:
address: https://us-central1-<my-project>.cloudfunctions.net/<my-hello-function>
path_translation: CONSTANT_ADDRESS
protocol: h2
responses:
"200":
description: "successful operation"
schema:
$ref: "#"
"400":
description: "Invalid datetime supplied"
"404":
description: "Unknown path"
security:
- api_key: []
securityDefinitions:
api_key:
type: "apiKey"
name: "api_key"
in: "query"
definitions:
ApiResponse:
type: "object"
properties:
code:
type: "integer"
format: "int32"
type:
type: "string"
message:
type: "string"
何が足りないのでしょうか? 何が間違っているのでしょうか?
答え1
あなたの調子が良いといいのですが。
私は専門家ではありませんが、ドキュメントを読んでスニペットを再度確認したところ、URL で を使用する場合は の代わりにname
を使用するsecurityDefinitions
べきではないでしょうか?key
api_key
my-gateway-xxxxxxxx.uc.gateway.dev/v1/stats&鍵=<私のAPIトークン>
答え2
API キーを URL 経由で渡して使用するには、クエリ パラメータとして送信する必要があります。送信方法は、stats&key=
stats ではなく named ルートにアクセスしようとするようなものです。
URL は次のようになります:
https://my-gateway-xxxxxxxx.uc.gateway.dev/v1/stats?key=<my-API-token>
交換する&キーパラメータに?