Numerosos servicios pueden aceptar parámetros de cadena de consulta en la URL cuando se realiza una solicitud POST con Content-Type: application/x-www-form-urlencoded y otros parámetros en el cuerpo, pero parece que AWS API Gateway no puede aceptar parámetros de cadena de consulta. .
Cuando llamo a AWS API Gateway con una plantilla de mapeo POST para application/x-www-form-urlencoded y parámetros de URL de cadena de consulta (con una función Lambda), aparece el siguiente error:
{ "message":"When Content-Type:application/x-www-form-urlencoded, URL cannot include query-string parameters (after '?'): '/prod/webhook?inputType=wootric&outputType=glip&url=...'" }Aquí hay un ejemplo de cURL:
curl -XPOST 'https://{myid}.execute-api.{myregion}.amazonaws.com/prod/webhook? \ inputType=wootric&outputType=glip&url=https://hooks.glip.com/webhook/ \ 11112222-3333-4444-5555-666677778888' \ -d "@docs/handlers/wootric/event-example_response-created.txt" \ -H 'Content-Type: application/x-www-form-urlencoded' -vEl objetivo específico es publicar un evento de webhook de Wootric en una función de Lambda mediante una URL con parámetros de cadena de consulta.
Puedes obtener el código aquí:
https://github.com/grokify/chathooks
El archivo del cuerpo del evento de Wootric está aquí:
El problema de GitHub está aquí:
https://github.com/grokify/chathooks/issues/15
El mensaje de error parece bastante definitivo, pero quería preguntar:
Si no hay solución para esto, ¿hay alguna buena solución ligera que no sea la implementación de una solución de servidor alojado como Heroku? Además, ¿otros servicios en la nube admiten esto con su puerta de enlace API + funciones en la nube, como Google?
Algunos ejemplos que muestran soporte para ambos:
Sí, hay una solución alternativa y el problema clave es configurar la plantilla de mapeo que convertirá la cadena en json. Ejemplo muy detallado que se muestra en API Gateway para cualquier tipo de contenido .
Establezca la propiedad de solicitud como "Tipo de contenido", "aplicación/json" para su HttpURLConnection como se muestra a continuación: conexión.setRequestProperty("Tipo de contenido", "aplicación/json");
Tuve un problema similar, con un proveedor externo que usa enlaces web. Resulta que mi proveedor está transformando la ruta de la URL de UPPERCASE a LOWERCASE . Por ejemplo, el punto final debería ser apigateway.com/dev/0bscur3dpathRANDOM en lugar apigateway.com/dev/0bscur3dpathRANDOM . Tú entiendes.