Question:
Numerous services can accept query string parameters in the URL when a POST
request is made with Content-Type: application/x-www-form-urlencoded
and other parameters in the body, but it seems AWS API Gateway cannot while also accepting query string parameters.
When I call the AWS API Gateway with a POST
Mapping Template for application/x-www-form-urlencoded
and query string URL parameters (with a Lambda function), I get the following error:
1 2 3 4 5 6 |
{ "message":"When Content-Type:application/x-www-form-urlencoded, URL cannot include query-string parameters (after '?'): '/prod/webhook?inputType=wootric&outputType=glip&url=...'" } |
Here is an example cURL:
1 2 3 4 5 6 |
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' -v |
The specific goal is to get a Wootric webhook event posted to a Lambda function using a URL with query string parameters.
You can get the code here:
https://github.com/grokify/chathooks
The Wootric event body file is here:
The GitHub issue is here:
https://github.com/grokify/chathooks/issues/15
The error message seems pretty definitive but I wanted to ask:
- Is there a workaround to configure an API Gateway to support both?
- Is there a standards-based reason why AWS would not support this or is this just a design decision / limitation?
If there’s no solution to this, is there a good lightweight solution other than deploying a hosted server solution like Heroku. Also, do other cloud services support this with their API gateway + cloud functions, like Google?
Some examples showing support for both:
Answer:
Yes,there is a workaround and the key issue is to set the mapping template that will convert string into json . Very detailed example shown in
API Gateway any content type.