Necesito una función de nube muy segura, así que estoy intentando colocarla detrás de una puerta de enlace API. La función funciona bien cuando la llamo directamente pasando un token de portador en el encabezado:
https://us-central1-<my-project>.cloudfunctions.net/<my-hello-function>
Sin embargo, quiero permitir que se use con un token API a través de API Gateway (y luego hacer algo más útil que decir "hola"):
https://my-gateway-xxxxxxxx.uc.gateway.dev/v1/stats&key=<my-API-token>
Cuando intento llamarlo me sale:
{ "code": 404, "message": "La ruta no coincide con ninguna plantilla de URI de requisito". }
Mi archivo de configuración de 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"
¿Qué falta? ¿Qué estoy haciendo mal?
Respuesta1
espero que estés bien.
No soy un experto, pero después de leer los documentos y revisar su fragmento nuevamente, ¿no debería estar el name
in en lugar de si eso es lo que usa en la URL?securityDefinitions
key
api_key
mi-gateway-xxxxxxxx.uc.gateway.dev/v1/stats&llave=<mi-token-API>
Respuesta2
Para utilizar una clave API pasándola a través de la URL, debe enviarla como parámetro de consulta; la forma en que la envía es como intentar ingresar a una ruta con nombre stats&key=
en lugar de estadísticas.
Tu URL debe ser algo como:
https://my-gateway-xxxxxxxx.uc.gateway.dev/v1/stats?key=<my-API-token>
Reemplace la&en el parámetro clave con un?